我对 scanf 在处理空格时的行为感到困惑。
这是我正在使用的代码:
int main()
{
int val;
int c;
scanf("%d\t", &val);
c = getchar();
if(c == EOF)
printf("eof");
else if(c == '\t')
printf("tab");
else if(c == '\n')
printf("newline");
}
这是我要传递的输入:
1234<tab><newline>
我希望这会打印“换行符”,因为 scanf 只是在寻找标签,并且默认情况下 scanf 在缓冲区中留下空白。相反,它打印“eof”。%d\t
似乎正在吞噬换行符。
我是否缺少有关 scanf 工作原理的信息?
请注意,如果我将其更改为以下内容,它会正确打印“换行符”:
int main()
{
int val;
int c;
scanf("%d", &val);
getchar(); /* note this extra getchar */
c = getchar();
if(c == EOF)
printf("eof");
else if(c == '\t')
printf("tab");
else if(c == '\n')
printf("newline");
}