【发布时间】:2014-01-15 18:10:28
【问题描述】:
我有这样的测试代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char c, str[20];
printf("Enter a character : ");
scanf("%c", &c);
printf("Enter a string : ");
fflush(stdin);
gets(str);
printf("\n\n\nResult : %c\n%s\n", c, str);
return 0;
}
我读过一些文章说这段代码可以工作,因为在扫描 c 字符后,缓冲区中仍然有 '\n' 字符。 fflush(stdin) 会清除缓冲区,所以gets() 函数可以正常工作
但实际上,当我在 Mac OS 环境中编译和运行这段代码时, fflush(stdin) 什么也没做。我输入了一个字符(例如,'k'),然后它打印出 k 字符和一个 '\n' 字符。它假设允许我输入一个字符,一个字符串,然后打印它们。有谁知道为什么? 谢谢!
【问题讨论】:
-
The fflush(stdin) will clear the buffer是错误的。 fflush 仅用于输出流。 -
在点击“发布您的问题”按钮之前,您是否查看了“可能已经有答案的问题”?
-
通过处理系统的实现。