Нечетные целые числа не суммируются правильно - PullRequest
0 голосов
/ 11 ноября 2019

Выполнение упражнения, чтобы получить 5 целых чисел у пользователя и сложить только нечетные числа. Все складывается правильно, пока последнее число по какой-то причине не испортило все:

Код и тест

#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;
}

1 Ответ

0 голосов
/ 11 ноября 2019

Вы читаете 5 чисел в элементы массива от userNum[1] до userNum[5], но так как индексы массива начинаются с 0 в C, 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;
}
...