我有以下代码,
fflush(stdin);
print("Enter y/n");
scanf("%c",&a);
这里,它在输入之前就退出了。看起来问题是因为它没有刷新可能有一些垃圾字符的输入缓冲区。有什么替代flush(stdin)。这段代码片段是在Solaris中工作,但它在Linux中不起作用。
答案 0 :(得分:16)
C FAQ对此进行了详细解释。另见:explanation。建议的解决方案:
fgets
和sscanf
用它来换新线
while((c = getchar()) != '\n' && c != EOF)
/* discard the character */;
刷新stdin适用于某些实现的事实 is wrong 。
有些供应商确实实现了fflush fflush(stdin)丢弃未读 字符,虽然便携式程序 不能依赖于此。
答案 1 :(得分:3)
对于GNU上的C
你可以使用
__fpurge(stdin);
包含用于访问该函数的stdio_ext.h标头。虽然帖子很老,但我认为这可能对某些Linux开发人员有所帮助。
答案 2 :(得分:2)
scanf(" %c",&c);
或
scanf(" ");
//reading operation (gets(), fgets(stdin,...) etc)
scanf()格式字符串中的空格将忽略任何空格,直到第一个非空格。