Chinaunix首页 | 论坛 | 博客
  • 博客访问: 525795
  • 博文数量: 104
  • 博客积分: 915
  • 博客等级: 下士
  • 技术积分: 2169
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-24 21:34
文章分类

全部博文(104)

文章存档

2018年(4)

2015年(14)

2014年(9)

2013年(56)

2012年(21)

分类: C/C++

2013-04-17 09:21:26


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

首先是为什么要请缓存呢?
      因为scanf()和getchar()函数是从输入流缓冲区中读取值的,而并非从键盘(也就是终端)缓冲区读取。
解决的方法就是清除缓存区里面的东西,但是怎么样清除呢?
      在windows 下面 flushall () 或者 fflush (stdin), rewind (stdin) 都可以起到作用。(但在linux下不起作用)

详细代码(举例)见  
http://www.ludou.org/c-clear-buffer-area.html
但是对于这个作者所写的在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) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册