C ++ Проблемы с заполнением массива - PullRequest
0 голосов
/ 07 февраля 2020

У меня проблема с моим C ++ кодом , которая связана с получением ввода от пользователя и заполнением массива на основе этого ввода. Для моей функции fillArray () мне нужен способ прочитать все входные данные из одной строки и заполнить массив этими входными данными, пока пользователь не введет -1 в конце, что-то другое чем положительное целое число или превышает порог в 20 элементов.

Например, если я ввожу 1 2 3 4 5 6 -1 в одну строку, я хочу, чтобы функция displayArray () выводила 1 2 3 4 5 6, или если я пишу 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21, я хочу, чтобы displayArray () выводил 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20.

Кажется, что когда я вводил -1 в конце, displayArray () выводит что-то вроде 1 2 3 4 5 6 94837 или какое-то произвольно большое число. Если кто-то может помочь мне с этим, я был бы признателен, вот мой код:

#include <iostream>
using namespace std;

const int CAPACITY = 20;

void displayArray(int array[], int numElements)
{
    for (int i = 0; i < numElements; i++)
        cout << array[i] << " ";
    cout << endl;
}

void fillArray(int array[], int& numElements)
{
    int arrayPosition = 0;
    int testArrayPosition = 0;
    int testArray[CAPACITY];
    bool continueReading = true;

    cout << "Enter a list of up to 20 integers or -1 to end the list";
    do
    {
        cin >> valueEntered;

        if (valueEntered == -1)
        {
          continueReading = false;
        } else if (valueEntered != -1) {
            array[arrayPosition] = valueEntered;
            arrayPosition++;
        }
    } while ((continueReading==true) || (arrayPosition >= CAPACITY));

    numElements = (arrayPosition+1);
}

int main()
{
    int array[CAPACITY];
    int numArrayElements = 0;

    fillArray(array, numArrayElements);
    displayArray(array, numArrayElements);

    cout << "NumArrayElements: " << numArrayElements << endl;
}

1 Ответ

0 голосов
/ 07 февраля 2020

Код, который вы разместили, не компилируется. В нескольких местах вы ссылаетесь на переменную valueEntered, даже не объявив ее.

Кроме того, следующая конструкция не имеет смысла:

if (valueEntered == -1)
{
    [...]
}
else if (valueEntered != -1)
{
[...]

Поскольку выражение условия для второго, если оператор является точным отрицанием выражения условия первого оператора, второй оператор if является излишним и может быть удален, например:

if (valueEntered == -1)
{
    [...]
}
else
{
[...]

Однако, поскольку вы заявили в своем вопросе, что что-то еще, кроме положительное целое число (не только -1) должно привести к завершению вашей программы, вам нужно изменить эту часть вашей программы на следующую:

if (valueEntered <= 0)
{
    continueReading = false;
}
else
{
    array[arrayPosition] = valueEntered;
    arrayPosition++;
}

Кроме того, как уже было сказано кем-то еще в раздел комментариев, строка

while ((continueReading==true) || (arrayPosition >= CAPACITY));

должна быть изменена на

while ( continueReading && arrayPosition < CAPACITY )

и строка

numElements = (arrayPosition+1);

следует изменить на

numElements = arrayPosition;

...