【问题标题】:I am inputting a double integer into an equation, but keep getting 0我在方程中输入一个双整数,但一直为 0
【发布时间】:2020-01-15 00:26:48
【问题描述】:

我是 C 编程的新手,遇到了一个小问题。

我输入 0.05 作为双浮点数,并通过我的解决方案图片中给出的公式运行它以获得答案 0.06242。但是,无论我输入什么作为输入,我都会得到 0.000000。有人可以向我解释我的代码是否有问题,或者解释我是否在 scanf 和 printf 中都正确使用了“%lf”?谢谢。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

main(){
    double guess, pow1,pow2,pow3, estimate;
    printf("Type in an initial guess of the root(for this case type 0.05):  ");
    scanf("%lf", &guess);

    printf("Calculating the root estimate using formula from solution...\n");
    pow1 = pow(guess, 3);
    pow2 = 0.165*pow(guess, 2);
    pow3 = 3*pow(guess, 2);

    estimate = guess - ((pow1 - pow2 + 0.0003993) / (pow3 - 0.33*guess));
    printf("Estimate = %lf\n", estimate);
}

【问题讨论】:

  • 逐行调试代码,看看值哪里出错了
  • 什么是“双整数”?
  • 不是双整数,是双浮点数
  • @DAGonz 这不是整数输入,而是浮点输入。你了解整数和浮点数的区别吗?

标签: c


【解决方案1】:

main() 而不是 int main (void) 的存在意味着您使用的是被称为 C90 的古老版本的 C,而不是使用标准 C,因为 main() 只会在古老的 C90 中干净地编译。

C90 不支持 %lf 用于 printf,除非作为编译器扩展。它仅支持所有浮点类型的%f。这可以解释为什么你会得到奇怪的输出。见Correct format specifier for double in printf

通过获取更新的编译器和更新的 C 学习源来解决这个问题。

【讨论】:

  • 我在“最新”下载代码块时运行 GNU GCC 编译器
  • @DAGonz Codeblocks 使用的 Mingw gcc 端口不一定永远更新 - 它可能比 gcc 5.0 更早。它仍然是一个有点现代的编译器,但它默认为 C90。请参阅 this 了解如何强制它运行现代标准 C。
  • 我用gcc -std=c18 编译这段代码没有问题。它发出警告,但编译并运行良好。
  • @klutt 与 OP 不同,你的意思是什么? -std=c18 在默认的 Codeblocks 安装中甚至可能不可用。幸运的是,它们近年来更新到了 gcc 5.0 之后。
  • @klutt 或者如果这是另一个“它编译得很好,只是带有警告”的辩论,我不会再有那个了。阅读 C17 5.1.1.3 后,开始使用-pedantic-errors
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-13
  • 2018-09-09
  • 1970-01-01
  • 2017-03-26
  • 1970-01-01
  • 2022-01-16
相关资源
最近更新 更多