Проблемы со сбором пользовательских данных и их сохранением в векторе - PullRequest
0 голосов
/ 02 апреля 2019

Мне сказали, что вместо использования массива я мог бы использовать вектор для хранения пользовательских данных.Преимущества использования вектора заключаются в том, что нет необходимости объявлять количество элементов, которые будет иметь вектор, и если вы добавите значение к уже заполненному вектору, вектор автоматически увеличит свой размер.Я также хотел бы, чтобы страж вышел из цикла ввода.Однако, когда я пытаюсь реализовать это, я получаю ошибку во время выполнения.

Я думаю, что ошибка находится в строке 14 или строке 17.

сообщение об ошибке

Ошибка отладочного подтверждения

Программа: C: \ Users \ Grayson \ source \ repos \ AddUp.exe Файл: d: файлы программы \ vc \ tools \ msvc \ 14.16.27023 \ include \ vector Line1733

Выражение: векторный индекс выходит за пределы диапазона

, чтобы узнать, как ваша программа может вызвать ошибку подтверждения, см. документацию по утверждениям в Visual C ++.

Мой код:

#include <iostream>
#include <vector>

использование пространства имен std;

int main()
{
    vector<int>userIn;
    int numElements;
    int index=0;
cout << "Enter your inputs. Enter -1 to quit." << endl;
    while (userIn[index] != -1)
    {
        cout << "Input index #" << index << ": " << endl;
        cin >> userIn[index];
        index++;
    }
cout << "done";

return 0;

}

1 Ответ

0 голосов
/ 02 апреля 2019

Вы пытаетесь добавить элемент к вектору неправильно.Правильный путь - использование push_back

#include <iostream>
#include <vector>

using namespace std;

int main()
{
        vector<int>userIn;
        int elem;
        int index = 0;

        cout << "Enter your inputs. Enter -1 to quit." << endl;

        while (true)
        {
                cout << "Input index #" << index << ": ";
                cin >> elem;

                if (elem != -1)
                {
                        userIn.push_back(elem);
                        index++;
                }
                else
                {
                        break;
                }
        }

        cout << "done";

        return 0;
}
...