先来看一段代码
#include <stdio.h>
#include <stdlib.h>
int main(){
char c;
while((c=getchar()) !=EOF){
printf("%c\n",c-32);
}
system("pause");
return 0;
}
此时我们可以输入多个字符,键盘输入的字符都会存到缓冲区,getchar()会先从缓冲区读取内容,所以当输入多个字符时,条件成立,getchar()先读取缓冲区内容,以此输出,输出他们的大写字母。最后还输出了一个? 因为当输入afad时,会按enter结束,此时enter键会在缓冲区,对应的是’\n’ 因而会有此结果。那么改变一下写法。
#include <stdio.h>
#include <stdlib.h>
int main(){
char c;
while(fflush(stdin),(c=getchar()) !=EOF){
printf("%c\n",c-32);
}
system("pause");
return 0;
}
在循环条件中加入了fflush(stdin),清除缓冲区,getchar()一次只读取一个字符,当输入多个字符时,循环条件成立,getchar()先读取第一个字符,进入循环,输出对应的大写字母,完成循环后,先进行了fflush(stdin),所以缓冲区的其它字符就没有了,所以就不能输出多个字符了,要重新输入。