我写了一个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;
}
答案 0 :(得分:1)
您要求输入两次,getchar()
仅在刷新缓冲区时返回,即按下 Enter 1 时。因此,getchar()
调用会消耗所有内容,然后您必须再次为gets()
键入相同的内容。
试试这个
fgets(member.name, sizeof(member.name), stdin);
而不是
while (getchar() != '\n')
gets(member.name);
请注意,我将gets()
替换为fgets()
,这更安全,仍然是c标准的一部分。
1 实际上,当'\n'
插入缓冲区时。
答案 1 :(得分:0)
参考上一个问题&#34; getchar does not stop when using scanf&#34;,输入仅在您输入换行符后发送到程序,但files/default
将换行符留在输入缓冲区中。然后以下scanf("%s", command );
将立即返回换行符。这就是程序不等待进一步输入的原因。
因此,在读取后续输入之前,需要确保清理std输入缓冲区。修改你的代码:
getchar()
到
scanf("%lu", &memebr.number);
puts("Please enter the street address");
while(getchar() != '\n')
gets(memebr.address);
应该可以执行该程序。