Откуда лишняя цифра в массиве ? (язык Си)

Рейтинг: 0Ответов: 1Опубликовано: 07.04.2015

Здравствуйте, программа должна читать восемь целых чисел в массив,а затем выводит их в обратном порядке.

Например если ввести:

1 2 3 4 5 6 7 8

то она выводит

8 8 7 6 5 4 3 2 1 (откуда появилась первая 8?)

или так

11 12 13 14 15 16 17 18

то же самое

8 18 17 16 15 14 13 12 11

Вот код

#include <stdio.h>
#define NUM 8
int main ()
{
    setlocale (0,"");
    int number, array[NUM], zero;

    printf ("Введите %d целых чисел: \n", NUM);

    for (number = 0; number < NUM; number++) /* Чтение чисел */
        scanf ("%d", &array[number]);

    for (number = 0; number < NUM; number++) /* проверка */
        printf ("%d ", array[number]);

        printf ("\n");

    for (zero = 0; number >= zero; number--) /* вывод в обратном порядке */
        printf ("%d ", array[number]);

    return 0;
}

Ответы

▲ 5Принят

У вас в конце второго цикла значение переменной number равно 8, это индекс за последним элементом массива. Поэтому в третьем цикле вы начинаете выводить с индекса 8, это неправильно.

Вы обращаетесь к массиву по несуществующему индексу. Это undefined behaviour, может случиться всё, что угодно, включая креш (и это ещё в лучшем случае) или потерю данных.

Попробуйте так:

for (number--; number >= 0; number--) /* вывод в обратном порядке */
    printf ("%d ", array[number]);

Или так:

while (--number >= 0) /* вывод в обратном порядке */
    printf ("%d ", array[number]);