先来看一段简单的程序
#include
#include
int main(){
char a, b;
a = getchar();
if(a == '1'){
printf("a = 1\n");
}else{
printf("a != 1\n");
}
b = getchar();
if(b == '1'){
printf("b = 1\n");
}else{
printf("b != 1\n");
}
}
程序想达到这样一个目的:输入两个字符,判断是否为1。若是则输出字符等于1,若不是则输出不等于1.但是
当我在VC6.0里输入第一个字符1,按结束回车时。出现这样的结果:
不等你输入第二个字符,程序自动输出b!=1,原因很简单,当你输入第一个字符1按回车结束时,1传给了字符a,回车留在了缓冲区里,于是乎当你还想第二次输入字符b时,系统缓冲区就直接把回车给了b,回车当然不等于1啦,所以出现了上述现象
解决这问题,也很简单。可以调用到fflush(stdin);了:stdin是默认的输入流文件,对应输入缓冲,而fflush(stdin);就可以清空整个输入缓冲区
同样的程序,在输入第二个字符前加上fflush(stdin);
char a, b;
a = getchar();
if(a == '1'){
printf("a = 1\n");
}else{
printf("a != 1\n");
}
fflush(stdin);//清空缓冲区
b = getchar();
if(b == '1'){
printf("b = 1\n");
}else{
printf("b != 1\n");
}
运行结果如图:
调用函数把缓冲区里的空间删除,于是乎就可以输入第二个字符了
留一个问题:
#include
int main()
{
char s[10],s1[10],s2[10],s3[10];
scanf("%s",&s);
printf("%s\n",s);
scanf("%s%s%s",&s1,&s2,&s3);
printf("%s %s %s\n",s1,s2,s3);
system("pause");
return 0;
}
当我两次都输入Iam a student!结果为什么是:
Iam a student!
I
Iam a student!
am a Student!
其中蓝色是我输入的部分,而红色是程序输出的结果,可以看到第二次程序没有输出I am a
student!而是输出了am a
student!.其实道理跟我今天讲得是一样的,自己分析看看吧