我正在尝试编写一个简单的程序来求 1 + 1/2 + ... + 1/n 的和。然而,我偶然发现了一个有趣的问题:这个 for 循环适用于 int,但不适用于 double。
double num, result = 1;
double main(){
printf("Input a number: ");
scanf("%f", &num);
for (double i = 1; i < num; i++)
{
result += 1/i;
}
printf("Result: %f", result);
return 0;
}
用 double 和 %f 替换每个 int 和 %d 后,循环被跳过,我不明白为什么。有人对此有解释吗?
Main 应返回一个 int 而不是 double。
Main 几乎总是返回
int
。通常其他程序可能依赖于 main 的返回值,期望 0 表示成功执行,任何其他整数表示错误。因此,任何其他程序都不准备处理除 int 之外的任何返回类型,使用 int 是常见的做法,并且在 c 标准中也以期望的形式编写。请参阅:为什么 main 必须返回 int? 和 程序启动。
Scanf 将
double
读作 float
使用
double
读取 scanf
时,您需要使用 %lf
而不是 %f
。 %f
用于读取 float
的内容。
文库包含和循环校正
在您提供的代码中,您没有包含
stdio
库,但我假设它是在您这边完成的。即使您将 result 初始化为 1,您的循环也从值 1 开始。这意味着您的函数通过执行 1/1 并将其添加到 1 来启动循环,在继续执行之前为您提供值 2其他计算。您可以通过在 2 处启动循环或在 0 处初始化结果来解决此问题。在下面的示例代码中,我只是在 2 处启动 for 循环。
工作代码 下面的代码应该可以工作,但在实现之前请确保您了解更改,以便避免将来出现错误。
#include <stdio.h>
double num, result = 1;
int main(){
printf("Input a number: ");
scanf("%lf", &num);
for (double i = 2; i < num; i++)
{
result += 1/i;
}
printf("Result: %lf", result);
return 0;
}