问题描述
#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()
中失败,因为已经设置了失败位。