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