[英]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.