我很抱歉这个愚蠢的问题。我有 C 程序提示用户输入年龄和姓名,然后将年龄和姓名打印到屏幕上。这是我从书中读到的练习。
这个程序:
#include <stdio.h>
int main (void) {
int age;
char name[20];
puts("Enter your age:");
scanf("%d",&age);
fflush(stdin);
puts("Enter your name:");
scanf("%s",name);
printf("Your age is %d\n",age);
printf("Your name is %s\n",name);
return 0;
}
当我在第一个输入额外字符时,scanf()
程序终止并将额外字符分配给下一个scanf()
然后我更改了代码,并添加了名为的函数,并在其中clear_buff()
使用该fgets
函数clear_buff()
来读取流中的剩余字符。代码按预期工作。
#include <stdio.h>
#define MAXLEN 80
void clear_buff(void);
int main (void) {
int age;
char name[20];
puts("Enter your age:");
scanf("%d",&age);
clear_buff();
puts("Enter your name:");
scanf("%s",name);
printf("Your age is %d\n",age);
printf("Your name is %s\n",name);
return 0;
}
void clear_buff(void){
char junk[20];
fgets(junk,MAXLEN,stdin);
}
我的问题是为什么fflush(stdin)
不在这个程序中工作?
书中说该fflush
函数清除流上的任何缓冲数据。而且我知道
fflush()
如果使用 I/O 流,该函数是 C 标准函数。