Почему cin.clear() не сбрасывает состояние failbit?

#c #cin

#c #cin

Вопрос:

 #include <iostream>
using namespace std;

int main(){
  int const size = 10;
  char input_1[size];
  char input_2[size];
  cout << "Enter input 1: " << endl;
  cin.get(input_1, size);
  cin.get();
  cin.clear();
  cout << "Enter input 2: " << endl;
  cin.get(input_2,size);
  cout << "input_2 = " << input_2 << endl;
  return 0;
}
  

ВЫВОД1
~/cplusplus $ ./conundrum.o

Введите ввод 1:

qwe

Введите ввод 2:

asd

input_2 = asd

ВЫВОД 2

~/cplusplus $ ./conundrum.o

Введите ввод 1:

Введите ввод 2:

вход_2 =

~/cplusplus $


Когда я ввожу непрерывный поток символов, эта программа выводит, как и ожидалось. ВЫВОД 1 показывает ожидаемый результат. Но когда я нажимаю enter только для первого ввода, этот код не запрашивает input_2 и выдает пустой input_2, показанный на ВЫХОДЕ 2. Насколько я понимаю, символ новой строки должен был быть уничтожен cin.get(), а failbit, установленный в какое-то ненормальное состояние (после того, как нечего хранить в input_1), должен быть сброшен cin.clear(), чтобы подготовиться ко второму cin.get(input_2, …) . В чем проблема?

Ответ №1:

Вы должны внести это изменение

 cin.get(input_1, size);
cin.clear();
cin.get();
  

В вашем коде cin.get() сбой, потому что бит fail уже установлен.

Комментарии:

1. Спасибо. Теперь я вижу, в чем проблема.