
刚开始接触c语言,请问大家为什么这样写输出空空的,把sum=0;放进外层for循环里输出就正确了?
首先,在循环内,变量 sum 在每次外层循环开始时没有重置。这意味着 sum 将会持续累积前一个 c 的值。如果这个逻辑不如预期,导致意外的结果,因此应该在每次计算新 c 值之前将 sum 重置为 0。
另外建议提前设置条件a<b,防止出现a>b不能输出结果的情况。
#include <stdio.h>
int main() {
int a, b, c, i;
// 输入两个整数 a 和 b
scanf("%d %d", &a, &b);
// 确保 a <= b
if (a > b) {
printf("输入无效,a 应该小于或等于 b。\n");
return 1;
}
// 遍历从 a 到 b 的每一个数字 c
for (c = a; c <= b; c++) {
int sum = 0; // 每次重置 sum
// 遍历小于 c 的所有 i
for (i = 1; i < c; i++) {
if (c % i == 0) {
sum += i; // 如果 i 是因子,累加到 sum
}
}
// 检查 sum 是否等于 c
if (sum == c) {
printf("%d\n", c); // 输出符合条件的 c
}
}
return 0;
}