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

时间:2012-04-22 15:24:25

标签: c scanf

对于以下代码:(假设已定义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的使用产生了未定义的行为?

1 个答案:

答案 0 :(得分:4)

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

ENTER是空格,因此scanf会尽可能多地忽略它,只有当它看到不是空格的东西(2)时才会停止。