1

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

scanf("%d\n", &x);
printf("foo");

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

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

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

4

1 回答 1

5

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

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

于 2012-04-22T15:28:33.353 回答