扫描不稳定的行为

时间:2010-09-24 07:27:55

标签: c scanf

我编译并运行以下控制台程序,它应该读取一个整数并返回成功读取的字段数:

# include <stdio.h>
int main ( void )
   {
int result, number;
printf ( " Enter an integer :  \n ");
result=scanf ( " %d " , & number );
printf ( " Fields read % d " , result );
return 0;
   }

我编译了(VS 2008)并在Win Vista下的2台机器上测试了它,而在一台机器上它按预期运行,在另一种情况下,当我输入数字时,scanf没有返回并等待附加输入。我必须输入另一个整数才能退出,而且当它退出时它返回1作为结果值,这是不正确的,因为我输入了2个整数。

我错过了什么吗?

2 个答案:

答案 0 :(得分:3)

scanf的转换规范中的空格意味着:“跳过并忽略输入中的空格(如果有的话)。”

转换规范中的“%d”表示:“跳过并忽略空格(如果有的话),然后读取int

所以,当你说“%d”时,你会说:“跳过空格,如果有,请阅读int,跳过空格(如果有的话),停止”。

当您输入数字时,会发生这种情况:

input: 42<ENTER>
scanf: ^^          int
scanf:   ^^^^^^^   space

忽略&lt; ENTER&gt;后,scanf仍处于“忽略空间”模式。它需要“看到”某些东西而不是“停止”的空间。

答案 1 :(得分:2)

这种情况正在发生,因为格式字符串" %d "中有空格。

请尝试使用"%d"