Не корректно вводит значение строки в массив С++

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

#include <iostream>
#include <string>
using namespace std;

int main()
{
    setlocale(LC_ALL, "ru");

    int size;
    string type;

    cout << "Введите кол-во строк: "; cin >> size;

    string* arr = new string[size];

    for (int i = 0; i < size; i++)
    {
        cout << "Введите строку №" << i+1 << ": "; cin >> type;

        cout << endl;
        arr[i] = type;
    }
}

Вывод консоли:

Введите кол-во строк: 5
Введите строку №1: Привет как дела

Введите строку №2:
Введите строку №3:
Введите строку №4: 123 123

Введите строку №5:

То бишь, при вводе нескольких слов счетчик перескакивает сразу на несколько номеров. В чем проблема? Заранее большое спасибо

введите сюда описание изображения


Ответы (1 шт):

Автор решения: S.H.

Смотрите, простой ответ на Ваш вопрос звучит так: "при вводе строки из нескольких слов оператором >> каждое слово воспринимается как самостоятельная строка".

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

Самый очевидный способ - воспользоваться std::getline(std::cin, type); вместо ввода оператором >>.

Также, обратите внимание на строку string* arr = new string[size]; в Вашем коде. Здесь Вы создаёте массив из нужного кол-ва указателей на строки, но под каждую строку память не выделяете.

По моему, было бы лучше - в рамках учебного задания - пользоваться стандартными контейнерами, например, vector<string> - при этом у Вас отпадает необходимость ручного выделения памяти.

Но, возможно, меня кто то поправит в комментариях?

→ Ссылка