替换fflush(stdin)

我有以下代码,

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

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

这在C FAQ中有很好的解释。 另见: 解释 。 建议的解决方案:

  • 退出使用scanf。 使用fgetssscanf
  • 用它来吃换行符

     while((c = getchar()) != '\n' && c != EOF) /* discard the character */; 

刷新stdin在某些实现上工作的事实是错误的

一些供应商确实实现了fflush,因此fflush(stdin)会丢弃未读字符,尽管便携式程序不能依赖于此。

对于GNU上的C.

您可以使用


 __fpurge(stdin); 

包括用于访问该函数的stdio_ext.h头文件。 虽然post很老,但我认为这可能对某些Linux开发人员有所帮助。

 scanf(" %c",&c); 

要么

 scanf(" "); //reading operation (gets(), fgets(stdin,...) etc) 

scanf()格式字符串中的空格将忽略任何空格,直到第一个非空格。