scanf()如何真正起作用?

时间:2010-01-18 11:45:44

标签: c scanf stdio

在Windows上,

char c;
int i;

scanf("%d", &i);
scanf("%c", &c);

计算机跳过从控制台检索字符,因为'\ n'保留在缓冲区上。 但是,我发现下面的代码效果很好。

char str[10];
int i;

scanf("%d", &i);
scanf("%s", str);

就像上面的情况一样,'\ n'仍然在缓冲区上,但为什么scanf这次成功从控制台获取字符串?

2 个答案:

答案 0 :(得分:6)

从gcc手册页(我没有Windows方便):

%c:始终匹配固定数量的字符。最大字段宽度表示如何 许多人物要读;如果未指定最大值,则默认值为1.它也不会跳过初始空白字符。

%s:匹配一串非空白字符。 它会跳过并丢弃初始值 空白,但在阅读完东西后遇到更多空白时会停止。 [本条款应解释您所看到的行为。 ]

答案 1 :(得分:2)

无法理解问题,但scanf会忽略所有空格字符。 n是一个空白字符。如果要检测用户何时按下输入,则应使用fgets。

fgets(str, 10, stdin);