做一个练习,从用户那里取5个整数,并仅将奇数相加。一切都正确加起来,直到最后一个数字由于某种原因弄乱了一切:

Code and Test

#include <stdio.h>

int main() {
    int userNum[5];
    int i;
    int sum = 0;

    for (i = 1; i <= 5; ++i) {
        printf("Please enter number %d:\n", i);
        scanf("%d", &userNum[i]);

        if (userNum[i] % 2 > 0) {
            sum = sum + userNum[i];
        }
    }
    printf("The sum of all odd integers is: %d", sum);

    return 0;
}

最佳答案

您正在将5个数字读入数组元素userNum[1]userNum[5],但是由于数组索引在C中从0开始,因此userNum[5]不存在,并且当程序尝试存储数字到末尾时,该程序具有未定义的行为的数组。其他一些变量被修改,输出为伪造的。未定义的行为实际上可能会带来更糟糕的后果,例如,伪造的候选人以比他的对手更少的选票赢得选举:)

这是更正的版本:

#include <stdio.h>

int main() {
    int userNum[5];
    int i;
    int sum = 0;

    for (i = 0; i < 5; ++i) {
        printf("Please enter number %d:\n", i + 1);
        if (scanf("%d", &userNum[i]) != 1) {
            printf("invalid input\n");
            return 1;
        }
        if (userNum[i] % 2 > 0) {
            sum = sum + userNum[i];
        }
    }
    printf("The sum of all odd integers is: %d\n", sum);

    return 0;
}

09-26 03:55