【问题标题】:scanf reads every double wrongscanf 读取每个双重错误
【发布时间】:2013-11-25 12:45:15
【问题描述】:

我有以下代码:

    int main(void)
{
    double r;
    scanf("lf",&r);
    printf("%lf\n",r);
}

我输入的任何值都会返回一个大约 40-50 位的无意义数字。 scanf 可以很好地处理字符、整数、字符串等,但是使用双打我会遇到这个问题。 有人可以帮帮我吗?

【问题讨论】:

  • 不是“%lf”?这是你的错字吗?
  • 不,实际上我做错了,尽管我的完整程序中的 printf 是正确的 >>
  • 当你printfdouble时,你应该使用%f,而不是%lf

标签: c double scanf lf


【解决方案1】:
scanf("lf",&r);

应该是

scanf("%lf",&r);

【讨论】:

    【解决方案2】:

    您在格式字符串中缺少百分比 (%) 符号,它应该是:

    scanf("%lf", &r);
    

    然后您应该添加检查返回值,因为正如您刚刚了解到的,I/O 很脆弱并且可能会失败。因此,除非您已验证扫描工作正常,否则依赖包含有效值的 r 是错误的:

    if(scanf("%lf", &r) == 1)
    {
      print("got the double %g\n", r);
    }
    else
    {
      printf("**Failed to read a double value!\n");
    }
    

    【讨论】:

    • +1 最具教育意义的答案,但没有给出代表。人怎么了?
    【解决方案3】:

    阅读时需要%lf

    【讨论】:

      【解决方案4】:

      试试

      scanf("%lf",&r);
      

      你忘了输入%

      【讨论】:

        【解决方案5】:

        你需要

        scanf("%lf", &r);
        

        每当您使用 scanf() 时,您都需要在您使用的变量类型前面加上百分号。

        【讨论】:

          【解决方案6】:

          你在lf之前忘记了%

          scanf("%lf", &yourDouble);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-01-21
            • 1970-01-01
            • 1970-01-01
            • 2015-09-04
            • 2015-06-15
            • 1970-01-01
            • 2015-06-08
            相关资源
            最近更新 更多