【问题标题】:scanf erratic behaviour扫描不稳定的行为
【发布时间】:2010-09-24 07:27:55
【问题描述】:

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

# 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 个整数。

我错过了什么吗?

【问题讨论】:

  • @codaddict 的答案已经有了,但您确实需要努力使用空格。即使编译器工作正常,也经常存在语义差异。

标签: c scanf


【解决方案1】:

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

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

所以,当您说“ %d ”时,您是在说:“如果有空格,请跳过空格,阅读int,如果有空格,请停止”。

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

输入:42 扫描:^^ int scanf: ^^^^^^^ 空间

忽略 后,scanf 仍处于“忽略空格”模式。它需要“看到”一些东西,而不是“停止”的空间。

【讨论】:

    【解决方案2】:

    这是因为您的格式字符串 " %d " 中有一个空格。

    尝试改用"%d"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-13
      • 2017-05-30
      • 1970-01-01
      • 1970-01-01
      • 2011-01-27
      • 2019-08-02
      • 1970-01-01
      相关资源
      最近更新 更多