替换fflush(stdin)
我有以下代码,
fflush(stdin); print("Enter y/n"); scanf("%c",&a);
在这里,它在输入之前就退出了。看起来问题是因为它没有刷新可能有一些垃圾字符的输入缓冲区。有什么替代的flush(stdin)。这个代码片段在Solaris中工作但它不适用于Linux。
这在C FAQ中有很好的解释。 另见: 解释 。 建议的解决方案:
- 退出使用scanf。 使用
fgets
和sscanf
-
用它来吃换行符
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()格式字符串中的空格将忽略任何空格,直到第一个非空格。