为什么我在CodeBlocks中将它初始化为0后,在下面的代码中,for循环后sum的值会发生变化?
int main()
{
int a[5], i, sum;
sum= 0; // value of sum is not changed after this.
printf("\nSum=%d", sum);
for( i=1; i<6; i++)
{
printf("\n\nInput %d: ", i);
scanf("%d", &a[i]);
printf("Sum test=%d", sum);
}
printf("\n\nSum=%d", sum); // why does it changes?
return 0;
}
最佳答案
sum
永远不会改变,因为您永远不会修改它。
此外,你有未定义的行为,因为循环索引偏离了一个,所以你让 scanf()
写入超出数组 arr
的末尾,这可能是巧合的是存储 sum
的位置,这可以解释为什么你得到 Sum=4
,即最后输入的值。
C 数组是基于 0
的:使用这个:
for (i = 0; i < 5; i++)
您还必须包含所需的标准头文件并测试 scanf()
的返回值,以避免在无效输入时发生未定义的行为。
这是更正后的版本:
#include <stdio.h>
int main() {
int a[5], i, sum;
sum = 0;
printf("Sum=%d\n", sum);
for (i = 0; i < 5; i++) {
printf("\nInput %d: ", i);
if (scanf("%d", &a[i]) != 1)
break;
sum += a[i];
printf("Sum test=%d\n", sum);
}
printf("\nSum=%d\n", sum);
return 0;
}
关于for循环可以在c中显式更改变量的值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52794715/