Напишите программу, которая запрашивает у пользователя до 10 целых чисел (их может быть меньше); используя массивы, и для циклов

Напишите программу, которая запрашивает у пользователя до 10 целых чисел (их может быть меньше); прекратить запрашивать, когда пользователь вводит ноль. Затем перечислите числа в обратном порядке. Используйте следующий пример запуска в качестве руководства:

    Enter a number (0 to stop): 11
Enter a number (0 to stop): 33
Enter a number (0 to stop): 55
Enter a number (0 to stop): 77
Enter a number (0 to stop): 99
Enter a number (0 to stop): 0
Your numbers in reverse order are:
99, 77, 55, 33, 11

ниже мой текущий код, и я не могу понять, что я делаю неправильно.

#include <iostream>
#include <string>
using namespace std;int main( ) {
int max = 10;
int num = 1;
int userVal[max];
int i = 0;while(num <= max) {
cout << "Enter a number (0 to stop): ";
cin >> userVal[i];
cout << userVal[i] << endl;
if(userVal[i] == 0) {
break;
}
++num;
}
cout << num << endl;
cout << "Your numbers in reverse order are: " << endl;
for(i = num; i >= 0; --i) {
cout << userVal[i];
if(i < num - 2) {
cout << ", ";
}
}

return 0;
}

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

    Enter a number (0 to stop): 11
Enter a number (0 to stop): 33
Enter a number (0 to stop): 55
Enter a number (0 to stop): 77
Enter a number (0 to stop): 99
Enter a number (0 to stop): 0
6
Your numbers in reverse order are:
6553532600-6638791760, 4197268, 0, 0,

2

Решение

Во-первых, в цикле while вы используете i для присвоения значений в массиве, вместо этого вам нужно использовать num. Во-вторых, num должен быть установлен в ноль, чтобы первый элемент массива был заполнен. Попробуйте этот код:

#include <iostream>
#include <string>
using namespace std;int main( ) {
int max = 10;
int num = 0;
int userVal[max];
int i = 0;while(num <= max) {
cout << "Enter a number (0 to stop): ";
int number;
cin >> number;

cout << number << endl;
if(number == 0) {
break;
}

userVal[num] = number;
++num;

}
cout << num << endl;
cout << "Your numbers in reverse order are: " << endl;
for(i = num; i >= 0; --i) {
cout << userVal[i];
if(i < num - 2) {
cout << ", ";
}
}

return 0;
}
0

Другие решения

Первое: вы используете две разные переменные — num а также i — но вы только увеличиваете переменную num. Лучше:

int num = 0; // start with 0 - this is the number read initially: nothing...
while(num < max) // need to use < instead
std::cin >> userVal[num]; // can use your counter now as index, too...

Тем не менее, вы должны настроить свой цикл вывода соответственно:

for(int i = num - 1; i >= 0; --i)

Второе: вы хотите печатать запятую всегда — кроме как для последнего индекса (0); так:

if(i > 0)
std::cout << ", ";

Наконец: вы должны объявить max const или constexpr. C ++ не поддерживает массивы переменной длины в стеке. Обычно ваш компилятор должен жаловаться на int userVal[max]; (возможно, на этот раз он примет это, поскольку распознает, что max никогда не изменяется — но это не стандарт C ++).

0

Спасибо за все, что вы помогли, приведенный ниже код — это то, что я придумал, в нем немного совмещено с каждым из ваших предложений.

#include <iostream>
#include <string>
using namespace std;int main( ) {
int max = 10;
int num = 1;
int userVal[max];
int i = 0;while(num < max) {
cout << "Enter a number (0 to stop): ";
int number;
cin >> number;
cout << number << endl;

if(number == 0) {
break;
}
userVal[num] = number;
++num;
}
cout << "Your numbers in reverse order are: " << endl;
for(i = num - 1; i > 0; --i) {
cout << userVal[i];
if(i > 1) {
cout << ", ";
}
}
cout << endl;

return 0;
}

я получил вывод ниже

    Enter a number (0 to stop): 11
Enter a number (0 to stop): 33
Enter a number (0 to stop): 55
Enter a number (0 to stop): 77
Enter a number (0 to stop): 99
Enter a number (0 to stop): 0
Your numbers in reverse order are:
99, 77, 55, 33, 11
0

Проверьте свою индексацию в цикле ввода.

-1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector