Linux C语言如何清除输入缓存

Linux C语言如何清除输入缓存,第1张

有的时候会遇到这样的一个问题,程序如下

#include

int main(void)

{

int a

char b

scanf("%d".&a)

scanf("%c",&b)

printf("%d\n",a)

printf("%c\n",b)

}

如果在终端上输入3

打印如下:

3

打印出一个3和一个空行,我们就输入了一个3,本来还应该再输入一个字符的,这是怎么回事。

原因是当我们输入3后又输入了个回车,C语言取字符都是在字符输入缓冲区中读取的,我们输入3后回车,C语言就把这个回车放在字符缓冲区中,所以第二个scanf读取的是字符缓冲区中的内容。

如果要解决一个最简单的方法就是把这个字符用getchar()读出来抛掉,这个就可以让我们第二次输入字符了,但getchar()只能读一个,如果字符缓冲区中的内容有多个,或者不知道多少个,这就不好办了。

还有一种方法就是在scanf上做文章,C语言的scanf这个输入函数是很奇怪的,如果我把第二个scanf改一下,改成scanf("

%c",&b)%c前面有个空格啊,这个空格是写在前面的,也就是在我们要输入之前,要读空白字符并忽略掉,如果你不输入一有效字符在终端不论按多少个回车空格tab等都是无效的,所以这样的scanf可以帮我们输入有效字符。

如果scanf写成scanf(" %c

",&b),前后都有一个空格,前加空格已经说过了,那后面加空格会出现什么情,注意,如果在后加个空格,当我们输入一个有效字符回车,发现还没有输完,还要继续输入,这怎么回是。在后面加空格是把我们输入有效字符后面的空白字符忽略了,此时我们必须要输一个有效字符才能终止输入。

再来说一下整型,如果把第一个scanf改成

int c

scanf("%d,%d",&a,&c)

输入两个整型的变量,且%d与%d这间有个,号。这种情况下,你在输入第一个数字后必须原样输出一个,号,后面的输入才有效,如果在输入的时候不加,号,在你输入第一个整型数据后,忽略其它所有字符和数字除了,号,加,号后,与紧跟,号后的数据被读入到变量c中,大家可以试,当前,号可以是其它任可字符,%d前后都可以加其它字符,都要原样输出才行。

另外,还可通过加__fpurge(stdin)函数清空输入缓冲区,此函数在头文件中。

1、先清除dns缓存,再清除浏览器缓存

2、清除dns缓存,可重新启动NSCD服务来达成清除DNS Cache的效果。命令如下:

# service nscd restart

或是

#/etc/init.d/nscd restart

3、清除浏览器缓存,有的在工具里面,有的在设置里面,根据浏览器的不同找一下,应该能找到;清除缓存之后重新打开浏览器即可。

4、如果是清除BIND服务器上的CACHE,命令:

# rndc flush

gcc可以用fgets或者其他函数将缓冲区数据读出来清除输入缓冲区。gcc不支持用fflush清除输入缓冲区,标准上也没有定义,但是vc是可以的。

看一下这个:http://blog.csdn.net/thecorr/article/details/1922541

和这个:http://liustb.blog.163.com/blog/static/133708019201131111471597/


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8177355.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存