【问题标题】:Scanf for double not working in Dev C++Scanf for double 在 Dev C++ 中不起作用
【发布时间】:2015-02-23 19:34:51
【问题描述】:

我遇到浮点数问题。我认为这里有些冲突。

输出是:

我的代码:

#include <stdio.h>


int main(){


    double y;

    printf("enter a decimal number: ");
    scanf("%f", &y);

    printf("%f\n", y);

    fflush(stdin);

    getchar();
    return 0;

    }

我使用的是 Dev C++ 4.9.9.2,首先,如果之前没有读取回车,我必须多次刷新回车。因此,如果有任何替代方案,请告诉我。其次,输出给出了这个......

【问题讨论】:

  • 不要使用古老的 IDE(Dev-C++ 4.9.9.2 是从 2005 年开始的)并且不要使用 fflush(stdin)(它不会像你认为的那样做)
  • 那么我将使用什么来代替 dev C++ 和 fflush(stdin)
  • 如果你不想要其他的IDE,至少有更新版本的Dev-C++(Orwell Dev-C++),其实是维护的。
  • 所以您还应该询问如何从 windows 的 cmd 中选择和复制粘贴 ..my friend.. @nick
  • @SUMITKUMARSINGHDIXIT 是的,也许在另一个问题中。

标签: c printf double scanf


【解决方案1】:

你应该使用

scanf("%lf", &y);

【讨论】:

    【解决方案2】:

    您在scanf 中使用了错误的格式说明符,这样做会导致UB(未定义行为)。double 的正确格式说明符是%lf,而浮点数的格式说明符是@987654325 @。所以只需将您的scanf 更改为

    scanf("%lf",&y);
    

    【讨论】:

      【解决方案3】:

      使用

      scanf("%lf", &y);
      

      相反。由于scanf("%f", &amp;y); 仅适用于floats。

      如果您启用编译器警告,它会告诉您格式说明符 "%f" 需要 float * 而不是 double * 参数。

      【讨论】:

      • 谢谢,但如果回车没有提前读取,我该怎么办。正如我提到的问题。?
      • 我不明白你的意思,scanf 会忽略所有空白字符,因此它会阻塞直到输入有非空白字符。
      • fflush(stdin) 也有未定义的行为。
      【解决方案4】:

      使用错误的格式说明符调用undefined behavior,这就是您得到意外结果的原因。调用 UB 后,您可能会得到预期或意外的结果。无话可说。
      使用%lf 读取double 类型的数据。

      【讨论】:

        猜你喜欢
        • 2016-03-07
        • 2015-04-28
        • 2014-11-10
        • 1970-01-01
        • 1970-01-01
        • 2022-12-10
        • 1970-01-01
        • 2011-04-14
        相关资源
        最近更新 更多