替换fflush(stdin)

时间:2011-06-08 10:29:57

标签: c

我有以下代码,

fflush(stdin);
print("Enter y/n");
scanf("%c",&a);

这里,它在输入之前就退出了。看起来问题是因为它没有刷新可能有一些垃圾字符的输入缓冲区。有什么替代flush(stdin)。这段代码片段是在Solaris中工作,但它在Linux中不起作用。

3 个答案:

答案 0 :(得分:16)

C FAQ对此进行了详细解释。另见:explanation。建议的解决方案:

  • 退出使用scanf。使用fgetssscanf
  • 用它来换新线

    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()格式字符串中的空格将忽略任何空格,直到第一个非空格。