0

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

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

#include <string> 
#include <iostream>

using namespace std;

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

  • if (!cin) { std::cerr << "не смог прочитать число";
    } else { std::getline(cin, str); cout << str; }
    – AR Hovsepyan Apr 14 '22 at 21:14

1 Answers1

1

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

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

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

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

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

HolyBlackCat
  • 27,445
  • 3
  • 27
  • 40