Частично заполненный массив C++
Привет в первый раз спрашиваю так извините, если я что-то не так
Для моего домашнего задания я должен создать программу, которая попросит пользователя ввести до 20 или менее целых чисел, и она выведет их в обратном порядке и выдаст самое большое и самое маленькое целое число в массиве. Пользователь может ввести менее 20 целых чисел, заканчивая его на 0. У меня есть большая часть вниз, но у меня есть несколько вопросов.
Часть задания утверждает, что если пользователь введет 20 целых чисел, он автоматически обратит порядок, но в моей программе пользователь должен ввести 21 целое число, а затем он обратит его.
Когда я пытаюсь определить наименьшее значение, это дает мне огромное отрицательное число, например -76534534.
Вот код:
#include <iostream>
using namespace std;
const int max_integers = 20;
void intro( );
void array(int array[], int size, int& x);
void reverse(const int array[], int x);
void high(const int array[], int x);
void low (const int array[], int x);
int main( )
{
int input[max_integers];
int x;
intro( );
array(input, max_integers, x);
reverse(input, x);
high(input, x);
low(input, x);
return 0;
}
void intro ( )
{
cout << "This program will read in a list of integers and put them into an array." << endl;
cout << "The maximum number of integers it will read in is 20. The program will then " << endl;
cout << "output the numbers in reverse order and give you the largest and smallest " << endl;
cout << "integers." << endl;
}
void array (int input[], int size, int& x)
{
cout << "Enter a list of integers (0 to end list). Max number you can enter is " << size << "." << endl;
int next;
int index = 0;
cin >> next;
while ((next > 0) && (index < size))
{
input[index] = next;
index++;
cin >> next;
}
x = index;
cout << endl;
}
void reverse (const int input[], int x)
{
cout << "The integers in reverse order are:" << endl;
for (int index = 0; x > index; x--)
{
cout << input[x-1];
cout << endl;
}
}
void high (const int input[], int x)
{
int high = 0;
for (int index = 0; x > index; x--)
{
if (input[x] > high)
{
high = input[x];
}
}
cout << "The largest value entered is " << high << "." << endl;
}
void low (const int input[], int x)
{
int low = 999999;
for (int index = 0; x >= index; x--)
{
if ((input[x] < low) && (low > 0))
{
low = input[x];
}
}
cout << "The smallest value entered is " << low << "." << endl;
}
1 ответ
1: Вы запрашиваете целое число перед while
цикл и затем цикл 20 раз, запрашивая номер. Решите это с помощью do-while
цикл:
do {
cin >> next;
input[index] = next;
index++;
} while ((next > 0) && (index < size))
2: Ваши значения в массиве неинициализируются, если пользователь вводит менее 20 чисел. Это неопределенное поведение. Вы можете исправить это по умолчанию, инициализируя:
int input[max_integers] = { };