对于这个问题,我相信所有人刚开始都遇到过,今天在编程(www.cppentry.com)的时候就遇到了,我就给大家做一个总结。 首先是为什么要请缓存呢: 因为scanf()和getchar()函数是从输入流缓冲区中读取值的,而并非从键盘(也就是终端)缓冲区读取。 解决的方法就是清除缓存区里面的东西,但是怎么样清除呢? 在windows 下面flushall ()或者fflush (stdin),rewind (stdin) 都可以起到作用。 但是对于这个作者所写的在linux 下的情况,我表示有问题。 对于setbuf (stdin ,NULL)这个形式只能用于循环两次的输入。 运行下来的结果就是正确的,但是一旦i>3以上,就有问题了。 运行下来的结果就变成这样了: input a char:1 input a char:2 input a char: 但是如果你 getchar () ,清楚缓存,不管你循环多少次就没有问题。 代码如下: #include<stdio.h> int main() { char ch[10] ; int i=0; while (i< 2) { printf (“input a char:”); scanf (“%c”,&ch[i]); setbuf (stdin,NULL); (换成getchar ()) i++; } printf (“%s”,ch); } |