Вывод элементов из массива в обратном порядке

#c #for-loop #reverse

#c #for-цикл #обратный

Вопрос:

Я пытаюсь заставить программу выводить числа 1,2,3,4 в обратном порядке. Однако я продолжаю получать странные результаты и не уверен, почему. Это то, что у меня есть на данный момент:

 #include <stdio.h>
#define NO_OF_ELEMENTS 4

int main()
{
    int numbers[NO_OF_ELEMENTS];
    int i, j;

    printf("Type a number and hit enter:n");

    /* Input each number */
    for(i = 0; i < NO_OF_ELEMENTS; i  )
    {
        scanf("%d", amp;numbers[i]);
    }

    /* Print each number in reverse order */
    for(j = NO_OF_ELEMENTS; j > 0; j--)
    {
        printf("%dn", amp;numbers[j]);
    }

    return(0);
}
  

Выходные данные программы выглядят следующим образом:

Программа запущена

Буду признателен за любую помощь в объяснении, почему код работает не так, как я ожидаю.

ИСПРАВЛЕНО

 /* Print each number in reverse order */
for(j = NO_OF_ELEMENTS; j > 0; j--)
{
    printf("%dn", numbers[j - 1]);

}
  

введите описание изображения здесь

Комментарии:

1. Это просто numbers[j] в printf ; нет amp; . И ваш индекс уменьшен на единицу, так что numbers[j - 1] .

2. @melpomene Я думаю, что это scanf в цикле for. Ответ приведен по этой ссылке. Это неправильно? Ваш комментарий к ответу правильный.

3. @Elyasin Вопрос, на который вы ссылались, касается scanf кажущегося пропуска ввода. Здесь это не так: OP смог ввести 4 числа, как ожидалось.

4. мельпомена права. Удалите amp; из printf. В настоящее время он выводит адрес переменной, а не ее значение.

5. Я не знаю, какой компилятор вы используете, но gcc может предупредить вас о подобных ошибках (по крайней мере, с включенными подходящими параметрами предупреждения).

Ответ №1:

Если printf вам это не нужно amp; , удалите его, и он будет работать.

И второй для вас должен начинаться с NO_OF_ELEMENTS - 1 , потому что массив начинается с 0 и заканчивается на 3 для 4 элементов.

введите описание изображения здесь

Комментарии:

1. Это не текстовый редактор, это Konsole, эмулятор терминала для среды рабочего стола KDE. Для кодирования я использую Webstorm и Vim.