Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1743618
  • 博文数量: 1493
  • 博客积分: 38
  • 博客等级: 民兵
  • 技术积分: 5834
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-19 17:28
文章分类

全部博文(1493)

文章存档

2016年(11)

2015年(38)

2014年(137)

2013年(253)

2012年(1054)

2011年(1)

分类:

2012-10-12 12:35:21

对于这个问题,我相信所有人刚开始都遇到过,今天在编程的时候就遇到了,我就给大家做一个总结。

首先是为什么要请缓存呢:
因为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

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);
}




阅读(261) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~