【发布时间】:2021-05-23 02:40:40
【问题描述】:
当我运行这段代码时,(在 Online C Compiler 和 OnlineGDB 上测试)
for(int i=1;i
(这个 for 循环没有任何代码来改变 selfNumsum 变量)
我发现了一些改变 selfNumSum 变量的东西..
- arr[5001] = {0, };
当我删除“= {0, }”时,它会正常打印 0。
- for(int i=1;i
如果是 4976~,for 循环使 selfNumSum 为 5002。否则如果是 ~4975,则正常打印 0。
但我不知道为什么这些与 selfNumSum 有关。 (我想知道为什么它会改变这个)
(为什么 = {0, } 改变其他变量?为什么不相关的 for 循环改变 selfNumSum?)
代码
#include <stdio.h>
int arr[5001] = {0, };
int a;
int b;
int num;
int oneNum;
int sum=0;
int selfNumSum=0;
int selfNumber(int a, int b) {
printf("init = %d\n", selfNumSum);
/*This for loop makes selfNumSum to 5002*/
for(int i=1;i<=5000;i++) {
//printf("i = %d, selfnumsum = %d\n", i, selfNumSum);
if(sum<=5000) {
num=i;
sum=i;
while(num>=1) {
oneNum=num%10;
num=num/10;
sum+=oneNum;
}
sum+=num;
arr[sum] = sum;
}
}
printf("selfNumSum = %d\n", selfNumSum);
for(int i=a;i<=b;i++) {
if(arr[i]==0) {
printf("+%d\n", i);
selfNumSum+=i;
}
}
return selfNumSum;
}
int main() {
scanf("%d %d", &a, &b);
selfNumSum = selfNumber(a, b);
printf("%d", selfNumSum);
}
输入
1 10
输出
init = 0
selfNumSum = 5002
+1
+3
+5
+7
+9
5027
如果我把selfNumSum-5002或者delete ={0, },打印正常,但是我想知道为什么这些改变selfNumSum?
(对不起我的英语不好..)
【问题讨论】:
-
sum+=num; arr[sum] = sum;sum的值变得大于5000,因此在用作索引时导致缓冲区溢出。如果您不相信,那么只需添加代码来检查该情况。
标签: c for-loop variables printing