对于这个问题,我相信所有人刚开始都遇到过,今天在编程的时候就遇到了,我就给大家做一个总结。
首先是为什么要请缓存呢?
因为scanf()和getchar()函数是从输入流缓冲区中读取值的,而并非从键盘(也就是终端)缓冲区读取。
解决的方法就是清除缓存区里面的东西,但是怎么样清除呢?
在windows 下面 flushall () 或者 fflush (stdin), rewind (stdin) 都可以起到作用。(但在linux下不起作用)
详细代码(举例)见
但是对于这个作者所写的在linux 下的情况,我表示有问题。
对于setbuf (stdin ,NULL)这个形式只能用于循环两次的输入。
运行下来的结果就是正确的,但是一旦i>3以上,就有问题了。
运行下来的结果就变成这样了:
input a char:1
input a char:2
input a char:
但是如果你 getchar () ,清楚缓存,不管你循环多少次就没有问题。
代码如下:
#include
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);
}
阅读(698) | 评论(0) | 转发(0) |