我有下面的代码,更换fflush的(标准输入)
fflush(stdin);
print("Enter y/n");
scanf("%c",&a);
这里,在退出之前给input.it看起来像问题,因为它不是冲洗掉,这可能是输入缓冲有一些垃圾字符。是否有任何替代flush(stdin)。此代码片段在Solaris中工作,但它不在Linux中工作。
我有下面的代码,更换fflush的(标准输入)
fflush(stdin);
print("Enter y/n");
scanf("%c",&a);
这里,在退出之前给input.it看起来像问题,因为它不是冲洗掉,这可能是输入缓冲有一些垃圾字符。是否有任何替代flush(stdin)。此代码片段在Solaris中工作,但它不在Linux中工作。
这在C FAQ中有很好的解释。另见:explanation。建议的解决方案:
fgets
和sscanf
使用该吃换行符
while((c = getchar()) != '\n' && c != EOF)
/* discard the character */;
该冲洗标准输入上的一些实现is wrong工作的事实。
某些供应商实现fflush所以 是fflush(标准输入)丢弃未读 人物,虽然移植的程序 不能依靠这一点。
更好的第一个选项。 – 2013-01-13 00:50:21
对于C上GNU
可以使用
__fpurge(stdin);
包括stdio_ext.h头用于访问功能。尽管这篇文章还很旧,但我认为这可能会帮助一些Linux开发人员。
这太可怕了,即使它按预期工作。想象一下,如果输入来自文件或管道,会发生什么情况。 – 2015-01-17 23:51:35
scanf(" %c",&c);
或
scanf(" ");
//reading operation (gets(), fgets(stdin,...) etc)
空间在scanf()的格式串将忽略任何空白,直到第一个非空格。
“man fflush”的第一行显示如下:* fflush()函数对给定的**输出或更新**流**强制**写入所有用户空间缓冲数据。 cnicutar对于如何跳过不需要的输入有正确的答案,但除此之外,您应该*阅读您正在使用的函数的文档。 *和*检查它们的返回值......因为上面的调用将返回'EOF'并设置'errno = EBADF'来表示您错误地使用该函数。忽略返回值是坏的,坏的,坏的... – DevSolar 2011-06-08 10:57:28
参见[使用'fflush(stdin)'](http://stackoverflow.com/questions/2979209/using-fflushstdin)。 – 2016-09-15 05:31:20