我编译并运行以下控制台程序,它应该读取一个整数并返回成功读取的字段数:
# 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个整数。
我错过了什么吗?
答案 0 :(得分:3)
scanf的转换规范中的空格意味着:“跳过并忽略输入中的空格(如果有的话)。”
转换规范中的“%d”表示:“跳过并忽略空格(如果有的话),然后读取int
”
所以,当你说“%d”时,你会说:“跳过空格,如果有,请阅读int
,跳过空格(如果有的话),停止”。
当您输入数字时,会发生这种情况:
input: 42<ENTER> scanf: ^^ int scanf: ^^^^^^^ space
忽略&lt; ENTER&gt;后,scanf仍处于“忽略空间”模式。它需要“看到”某些东西而不是“停止”的空间。
答案 1 :(得分:2)
这种情况正在发生,因为格式字符串" %d "
中有空格。
请尝试使用"%d"
。