变量赋初值时在for外为什么无效?

int i, n, s  ;
s = 0;                                                     //在这里不出结果
for (n = 2; n < 1000; n++) {
                                                                 //如果加在这里就可以得出结果
    for (i = 1; i < n; i++) {
        if ((n % i ) == 0) {
            s = s + i;
        }
    }

    if (n == s)
        printf("%d\n", n);


}

}

因为每次测试一个数之前s都要重置为0
s是统计单独一个数的因子之和
赋值在for外就不能每次测试一个数之前s重置为0
所有数的因子之和都会累加在一起,结果自然不对了

s=0的初始化必须放在第4行才符合条件,如果放在外面就变成统计所有的和了。

对于外层循环的每个值,都要重新计算sum值的。在第4或13行加上sum=0;即可

主要是理解代码的执行过程,变量放外面只执行一次,放for里面每次循环都执行,都重新赋值,所以导致结果是不一样的,希望帮助到你,我是csdn张老师,望题主采纳