为什么cin.clear()没有重置故障位状态

  • 本文关键字:故障 状态 cin clear 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;
}

OUTPUT1~/cplusplus$/难题

输入1:

qwe

输入2:

asd

input_2=asd

输出2

~/cplusplus$/难题

输入1:

输入2:

input_2=

~/cplusplus$


当我输入连续的字符流时,这个程序会按预期输出。OUTPUT 1显示预期输出。但是,当我只为第一个输入点击enter时,这段代码不会要求输入_2,而是抛出一个空的输入_2,如OUTPUT 2所示。根据我的理解,换行符应该已经被cin.get((消除,设置为某种异常状态的故障位(在input_1中没有任何存储之后(应该被cin.clear((重置,为第二个cin.get做好准备(input_2,…(。问题出在哪里?

您应该对进行此更改

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

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

最新更新