簡體   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