c语言 - 当格式字符串以换行符结尾时,scanf 的行为是什么?



对于以下代码:(假设已定义x)

scanf("%dn", &x);
printf("foo");

我希望如果我按 1 和 ENTER 键,程序会打印 foo,但事实并非如此。我必须按 1、回车、2、回车才能看到它打印 foo。

现在的问题是为什么我需要输入一些东西加上另一个 ENTER 才能返回 scanf?scanf 可能只需要比格式字符串多一个 ENTER,因为按 1、ENTER、ENTER 也不起作用。事实上,无论我输入多少 ENTER,scanf 都会一直等待,直到我输入其他内容。

我在Visual Studio 2010和MinGW中尝试过这个例子,它们产生了相同的结果。那么这怎么解释呢?这是特定于Windows的吗?还是依赖于编译器?或者只是这种 scanf 的使用会产生未定义的行为?

scanf 格式字符串中的'n'(以及空格、制表符、'r''f''v')使 scanf 忽略空格。

ENTER 是空格,因此 scanf 会尽可能多地忽略它,并且只有在看到非空格(2)时才停止。

最新更新