for循环可以在c中显式更改变量的值吗?

标签 c for-loop

为什么我在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;
}

enter image description here

最佳答案

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/

相关文章:

c - MSP430 TI while 循环持续时间

c++ - 如何在C中使用unwrap函数和iota(复数中的 "i")?

c++ - MinGW 找不到 XInput.h header

c++ - const&& 在 range-for 中的应用?

symfony - Twig 模板 - 循环中的循环迭代和项目

python - 如何对字符串进行数学运算?

c# - 声明变量时 'for' 循环的范围

c - 如何打印链表中的值?

c - gcc 中的嵌套函数使用 -std=c99

javascript - 为什么这个 for 循环需要这么长时间?