为什么cin.clear不重置故障位状态?

问题描述

#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;
}

OUTPUT1 〜/ cplusplus $ ./conundrum.o

输入输入1:

qwe

输入输入2:

asd

input_2 = asd

输出2

〜/ cplusplus $ ./conundrum.o

输入输入1:

输入输入2:

input_2 =

〜/ cplusplus $


当我输入连续的字符流时,此程序将按预期输出输出1显示预期的输出。但是,当我只为第一个输入按下回车键时,此代码不会要求输入_2并抛出空的输入_2,如输出2所示。据我的理解,换行符应已由cin.get()和failbit set歼灭。进入某种异常状态(在input_1中没有存储任何内容之后),应由cin.clear()重置,以准备第二个cin.get(input_2,...)。问题出在哪里?

解决方法

您应该进行此更改

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

在您的代码cin.get()中失败,因为已经设置了失败位。