Ввод строки c++ с пробелами

Следующая проблема:

getline не хочет работать после того как я ввожу некоторое число в другую переменную. Понятия не имею почему так происходит, в c++ новичок

#include <string> 
#include <iostream>

using namespace std;

int main()
{
    int n;
    string str;
    cin >> n;
    getline(cin, str);
    cout << str;
}


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

Автор решения: HolyBlackCat

getline дочитывает остаток первой строки, все что идет после числа. Даже если там ничего нет, кроме символа переноса строки.

Например, если ввести 1,2, то в getline попадет ,2.

Возможных решений несколько:

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

  • Проигноировать оставшуюся часть первой строки, вот так: cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');.

→ Ссылка