这段代码中定义变量b放在图中的位置和放在int main 下面一行有什么区别,为什么放在int main 下面一行代码跑不起来?


#include<iostream>
using namespace std;
int main()
{
    for(int a=2;a<=1000;a++)
    {    
        int b=0;
        for(int i=1;i<a;i++)
        {
            if(a%i==0)
            b+=i;
        }
            if(a==b)
                cout<<a<<endl;
    }
    return 0;
}

就上面这段代码,是用来求1000以内所有完数的
我个人感觉是因为变量的作用域问题,但是又说不上来是哪里出错了

现在这位置,每个a都要把b初始化为0,重新开始计算。
放到外面,则b一直是增长的,增长速度比a要快的多,满足不了a==b

放在外面的话,循环里面修改了值,下次循环还会继续使用被修改过的值;
放在循环里面,每次循环都重新定义为0