(转)C语言清除输入缓存方法记录

source:http://zhidao.baidu.com/question/191469857.html?fr=qrl&cid=866&index=1&fr2=query

fflush()函数是标准的作法。

setbuf(stdin,NULL)是GCC下可用的一种方法。

scanf("%*[^\n]%*c")是用扫描集将缓冲区中的字符全部读取来实现清除缓冲区的动作。

我最近在ubuntu下写一个程序,涉及到了这方面的问题。用fflush()和setbuf(stdin,NULL)都没有解决掉缓存的问题。 (奇怪的错误,DT地不想调试。)后来,搜到有 scanf("%*[^\n]%*c") 这种方法。非常管用,而且还跨平台。

scanf("%*[^\n]%*c")解释:

%*〔^\n〕将逐个读取缓冲区中的'\n'字符之前的其它字符,%后面的*表示将读取的这些字符丢弃,前遇到'\n'字符时便停止读取操作,此时,缓冲区中尚有一个'\n'字符遗留,所以后面的%*c将读取并丢弃这个遗留的换行符,这里的星号和前面的星号作用相同。由于所有从键盘的输入都是以回车结束的,而回车会产生一个'\n'字符,所以将'\n'连同它之前的字符全部读取并丢弃之后,也就相当于清除了输入缓冲区。

已有 11 条评论
  1. 尚轩 尚轩

    原文引用“用fflush()和setbuf(stdin,NULL)都没有解决掉缓存的问题”,并不是没有用的,其中第一个函数是VC下的,所以你在GCC下不行,第二个函数用的得当的话是可以清除掉缓存的,不过个人感觉这个方法不太好使

    话说,你可以看看 http://blog.sina.com.cn/s/blog_7b62c61c0100vhlu.html

    1. 我知道第一个是VC下,第二个是GCC下的

添加新评论