Частично заполненный массив C++

Привет в первый раз спрашиваю так извините, если я что-то не так

Для моего домашнего задания я должен создать программу, которая попросит пользователя ввести до 20 или менее целых чисел, и она выведет их в обратном порядке и выдаст самое большое и самое маленькое целое число в массиве. Пользователь может ввести менее 20 целых чисел, заканчивая его на 0. У меня есть большая часть вниз, но у меня есть несколько вопросов.

  1. Часть задания утверждает, что если пользователь введет 20 целых чисел, он автоматически обратит порядок, но в моей программе пользователь должен ввести 21 целое число, а затем он обратит его.

  2. Когда я пытаюсь определить наименьшее значение, это дает мне огромное отрицательное число, например -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] = { };
Другие вопросы по тегам