for循环中的多次初始化



我正试图编写一个函数来查找数字的平均值,起初我将代码编写为

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.1015153.3.但是当我试图将结果=0包括在"0"中时;对于";循环初始化后,我得到的结果是-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.1015-1-0.2-0.2你能告诉我原因吗。非常感谢。

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

double result = -1;

另一个在这里:

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

您已经声明了一个名为result的临时int(除了i(,其生存期和作用域都在for循环中。它覆盖前面声明的外部result。当for循环退出时,对result的引用将返回到前面声明的原始变量。

最简单的解决方法是做你在第一个例子中所做的事情。在循环外显式设置result=0

最新更新