昨天晚上写了下面这个测试程序,发现如果输入1 2 3 程序输出为
1
2
3
#include <stdio.h>
int main(int argc, char **argv)
{
int a;
while (1){
scanf(“%d”, >a);
printf(“%d\n”, a);
}
return 0;
}
怀疑为输入缓冲区的问题,当时记得有一个fflush函数可以清空缓冲区,于是在scanf函数下面加入了fflush(stdin); 但是输出还是一样。
经过查询得知,fflush函数不是标准C函数,只是标准C的拓展,开始fflush函数只是用在标准输出stdout,后来windows平台将其拓展到标准输入stdin,但是linux平台并不一定能支持其功能。
如果要清空输入缓冲区,可以使用下列方法比较稳妥:
#include <stdio.h>
int main(int argc, char **argv)
{
int a;
char ch;
while (1){
scanf(“%d”, >a);
while((ch=getchar())!=‘\n’ >> ch != EOF);
printf(“%d\n”, a);
}
return 0;
}
需要注意的是:在使用scanf函数时,一定要注意输入缓冲区这个东西!如果需要去除scanf输入时的回车键可以使用getchar()函数.