#include <stdio.h>
int main(void)
{
char c;
while (scanf(" %c ", &c) != EOF)
printf("you typed: %c \n", c);
return 0;
}
我可以在%c
" %c"
之前添加空格,让scanf
读取单个字符并跳过任何空格,但如果我在{{1}之后放置另一个空格有问题:
%c
那为什么它会在输入流中留下最后一个字符?即使我实际上用尾随空格键入a s d f
you typed: a
you typed: s
you typed: d
1 2 3
you typed: f
you typed: 1
you typed: 2
。
事实上"a s d f "
让scanf
未读,对吧?
顺便说一下"f \n"
的情况没有问题。
答案 0 :(得分:4)
[...]
5.由白色空格字符组成的指令通过读取第一个非空白字符(仍然未读取)的输入来执行,或者直到不再能够读取字符为止。该指令永远不会失败。
这意味着格式字符串*scanf
中的空格字符将读取并丢弃所有空格字符,直到遇到非空白字符。
因此,即使您输入"a s d f "
,您的scanf
在使用f
后会读取并丢弃最终空格,会等待进一步输入,因为它还没有遇到非空白字符。
您可以通过发送EOF
信号来关闭信息流,以便scanf
停止扫描并返回EOF
。或者您可以删除该空格并将其还原为原来的" %c"
。