gpt4 book ai didi

无法从 "gets()"输入

转载 作者:行者123 更新时间:2023-11-30 15:08:34 26 4
gpt4 key购买 nike

我编写了一个c程序,提示用户将他们的帐户信息输入系统,然后打印出来。我尝试使用“gets()”来捕获字符串。但是,它跳过了用户地址的问题,并跳入了州和城市的问题。我相信问题出在“gets()”函数上。有人可以帮我吗?

#include <stdio.h>
#include <stdlib.h>
#define MAXLEN 40
struct account
{
long unsigned number;
char address[MAXLEN];
char cityState[MAXLEN];
int zip;
double balances;
double credit;
char name[MAXLEN];
};

int main(void)
{
struct account memebr;
puts("Please enter the account number");
scanf("%lu", &memebr.number);
puts("Please enter the street address");
while(getchar() != '\n')
gets(memebr.address);
puts("Please enter your city/state");
while(getchar() != '\n')
gets(memebr.cityState);
puts("Please enter your zip code");
scanf("%d", &memebr.zip);
puts("Please enter your balances");
scanf("%lf", &memebr.balances);
puts("Please enter your credit limit");
scanf("%lf", &memebr.credit);
puts("Please enter your name");
while(getchar() != '\n')
gets(memebr.name);

printf("Account number: %lu\n", memebr.number);
printf("The street address is : %s\n", memebr.address);
printf("The owner comes from: %s\n", memebr.cityState);
printf("The zip code is: %d\n", memebr.zip);
printf("The owner's balances: %.2f\n", memebr.balances);
printf("The owner's credit limit: %.2f\n", memebr.credit);
printf("The owener is: %s\n", memebr.name);
return 0;

}

最佳答案

您要求输入两次,getchar() 仅在刷新缓冲区时返回,即按下 Enter1 时。因此,getchar() 调用会消耗所有内容,然后您必须再次键入相同的内容,gets() 才能获取它。

尝试这样

fgets(member.name, sizeof(member.name), stdin);

而不是

while (getchar() != '\n')
gets(member.name);

请注意,我用 fgets() 替换了 gets(),它更安全,并且仍然是 的一部分。标准。

<小时/>

1实际上,当'\n'插入缓冲区时。

关于无法从 "gets()"输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37265441/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com