#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.