我错误地使用fflush(stdin)来刷新stdin流的剩余部分,如下所示:
printf("Gimme number");
scanf("%d",&number);
fflush(stdin);
printf("Gimme string");
gets(string);
当然我已经包含了头文件和其余的..我知道fflush用于stdout而不用于stdin,但我非常需要一个替代方案才能在scanf之后使用一个获取。我在这里搜索了旧帖子,但我只看到了关于scanf的建议(“%c \ n”,c); 。当我执行scanf(“%d \ n”,x)时,这会使程序崩溃。有什么想法吗?
答案 0 :(得分:3)
一种可能性是使用scanf
之类的内容消费getchar()
留下的换行符:
printf("Gimme number");
scanf("%d",&number);
getchar();
printf("Gimme string");
gets(string);
另一种可能性就是使用scanf:
printf("Gimme number");
scanf("%d",&number);
printf("Gimme string");
scanf(" %99s", string);
如果您将99
替换为字符串缓冲区的长度,请注意%
之前的空格,以确保它忽略{{1}上留下的空格(或制表符或换行符) }}
答案 1 :(得分:0)
从输入中读取整行(包含ENTER的行)。
解析这些行(可能包含strtol()
,srttod()
或sscanf()
)。
char buffer[1000];
int number;
printf("Gimme number: ");
fflush(stdout);
fgets(buffer, sizeof buffer, stdin); // needs error checking
number = strtol(buffer, &err, 10); // needs error checking
printf("Gimme string: ");
fflush(stdout);
fgets(buffer, sizeof buffer, stdin); // needs error checking
strcpy(string, buffer);
string[strlen(string) - 1] = 0; // remove ENTER