Как заставить работать cin после использования getline? - PullRequest
0 голосов
/ 06 июня 2019

Итак, я прочитал строку, используя cin.getline (str, 10, 'h'), где, как вы можете видеть, я использовал собственный разделитель 'h' и хочу прочитать максимум 9 символов. После этого я использую cin >> n, чтобы прочитать целое число в моей переменной int n.

#include <iostream>
using namespace std;
int main() {
    int n;
    char str[100];
    cin.getline(str, 10, 'h');
    cout<<str<<'-'<<endl;
    cout<<"Enter a number:";
    cin>>n;
    cout<<n;
    return 0;
}

Предположим, я передал следующий ввод


2 3   pl32

, который является '\ n', за которым следует "2 3 pl32". Я ожидаю, что getline прочитает строку "\n2 3 pl", а затем cin прочитает целое число 32. Но это не то, что произошло.

Фактический вывод показал, что cin считал значение мусора:


2 3   pl-
Enter a number:0

Редактировать: Хорошо, теперь я понял. Getline установил failbit, вот что вызвало проблему. Проблема решена.

1 Ответ

1 голос
/ 06 июня 2019

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

...
cin.getline(str, 10, 'h');
cin.clear();                  # reset a possible error condition
cout<<str<<'-'<<endl;
cout<<"Enter a number:";
cin>>n;
...
...