For 循环适用于 int,但不适用于 double

问题描述 投票:0回答:1

我正在尝试编写一个简单的程序来求 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 后,循环被跳过,我不明白为什么。有人对此有解释吗?

c
1个回答
0
投票

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.