2015-12-02 2 views
-3

Я пытаюсь заполнить массив назад от 20 до 0, но всякий раз, когда я его распечатываю, он все еще печатает вперед. Например, я хочу поставить 1,2,3,4,5 и получить его как 5,4,3,2,1.Array не будет заполняться назад в C++

Я попытался сделать цикл for, который отсчитывает назад от 20 до 0, но когда я его печатаю, он все еще выходит неправильно. Любая помощь?

int temp; 
for (int i = 20; i > 0; i--) 
{ 
    cout << "Please enter the next number. Use a -1 to indicate you are done: "; 
    cin >> temp; 
    while(temp > 9 || temp < -2) 
    { 
     cout << "You may only put numbers in 0 - 9 or -1 to exit. Please enter another number: "; 
     cin >> temp; 
    } 
    arr1[i] = temp; 
    cout << arr1[i]; 
} 
for (int i = 21; i > 0; i--) 
{ 
    cout << arr1[i]; 
+10

Вы печатаете его назад. – erip

+1

Насколько велика arr1? 20, 21 или 22? И почему ты уходишь [0]? – deviantfan

+0

'for (int i = 0; i <20; ++ i) {cout << arr1 [i]; } ' – erip

ответ

2

Каков размер вашего массива? Предположим, что размер равен 21 (индексы от 0 до 20).

Прежде всего обратите внимание, что ваш первый цикл никогда не будет заполнять массив по индексу 0 (что-то вроде этого arr1[0] = temp никогда не будет выполнено в вашем первом цикле).
Если вы хотите, чтобы избежать этого, вы должны написать свой первый цикл, как это:

for (int i = 20; i >= 0; i--){ ... }.

Второго цикла имеют некоторые проблемы:

  1. Вы обход массива в обратном направлении, когда вы хотите сделать обратное.
  2. Цикл начинается с индекса из строкового (21).
  3. Петля может печатать некоторые неопределенные значения (вы должны помнить индекс последнего добавленного значения).

Я предлагаю вам использовать другие структуры данных, как стек, но если вы хотите использовать массив, который вы можете изменить свой код следующим образом:

int i; 
for (i = 20; i >= 0; i--){...} 
for (i; i <= 20; ++i) { cout << arr1[i]; } 

Если вы не хотите, чтобы объявить int i; вне петель вы можете сделать что-то подобное:

int lastAdded; 
for (int i = 20; i >= 0; i--){ 
    ... 
    lastAdded = i; 
} 
for (int i = lastAdded; i <= 20; i++) { cout << arr1[i]; } 

Edit: Обратите внимание, что ни код, ни мой перестает просить новое значение после вставки -1.
Если вы хотите добиться такого поведения, вы должны использовать цикл while вместо первого цикла for и проверить условие выхода.

+0

Он не проверяет условие выхода из первого цикла. –

+0

@Bob__ Спасибо! Я добавил примечание об этом. –

Смежные вопросы