繁体   English   中英

for循环中的多次初始化

[英]multiple initializations in for loop

我正在尝试编写 function 来查找数字的平均值,起初我将代码编写为

double CPPLib::average_of_numbers(std::vector<int> &numbers){
    double result = -1;
    if(numbers.size() != 0)
    {
        result = 0;
        for(int i=0;i< int(numbers.size());i++)
        {
            result += numbers[i];
            std::cout << result << std::endl;
        }
        std::cout << result << std::endl;
        result = result/numbers.size();
        std::cout << result << std::endl;
    }
    return result;
}

对于输入 {1,2,3,4,5},上面的代码工作正常并打印 1 3 6 10 15 15 3 3.但是当我尝试在“for”循环初始化中包含结果 = 0 时,我得到了结果在for循环之后为-1。如代码所示

double CPPLib::average_of_numbers(std::vector<int> &numbers){
    double result = -1;
    if(numbers.size() != 0)
    {
        
        for(int i=0,result = 0;i< int(numbers.size());i++)
        {
            result += numbers[i];
            std::cout << result << std::endl;
        }
        std::cout << result << std::endl;
        result = result/numbers.size();
        std::cout << result << std::endl;
    }
    return result;
}

结果显示为 1 3 6 10 15 -1 -0.2 -0.2 你能告诉我这是什么原因吗? 太感谢了。

在您的第二个示例中,您实际上已经声明了两个名为result的单独变量。 第一个在 function 的顶部。

double result = -1;

另一个在这里:

    for(int i=0,result = 0;i< int(numbers.size());i++)

您已经声明了一个名为result的临时int (除了i ),它的生命周期和 scope 在 for 循环中。 它覆盖了之前声明的外部result 当 for 循环退出时,对result的引用返回到之前声明的原始变量。

最简单的解决方法是按照您在第一个示例中所做的操作。 在循环外显式设置result=0

我还没有测试过,但我认为这可能是因为您试图将“int”添加到“double”中,这可能会给出错误的答案。 不要忘记 double 和 int 不是同一类型。

尝试将结果更改为 int。

此外,如果您需要在 if 语句中将其更改为 0,则将结果初始化为 -1 是没有意义的。 只需将其初始化为 0 并在条件有效时使用它。

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM