对于以下代码:(假设已定义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的使用产生了未定义的行为?
答案 0 :(得分:4)
scanf格式字符串中的'\n'
(以及空格,制表符,'\r'
,'\f'
和'\v'
)会使scanf忽略空格。
ENTER是空格,因此scanf会尽可能多地忽略它,只有当它看到不是空格的东西(2
)时才会停止。