cin与CTRL+z的问题
2023-04-15
博客园 2023-04-15 20:07:48
(资料图片)
这个问题源自于之前调试AVL树时,要输入两次值,我在第一次cin时,用CTRL+Z结束输入,之后的cin 程序执行直接就跳过了,不能输入了;;;
解决方法:在第一次输入后的程序加上以下两句时就可以了;
cin.clear();//cin.sync();
分析:CTRL + Z后;eof、fail 位都会true;clear()之后good位位true;
io标准库条件状态成员;
代码测试:
#includeusing namespace std;int main(){ int num; cout << "first num :" << endl; while(cin >> num) { } cout << "first num is:" << num << endl; cout << "goodbit:" << cin.good() << endl; cout << "eofbit :" << cin.eof() << endl; cout << "failbit:" << cin.fail() << endl; cout << "badbit :" << cin.bad() << endl; cin.clear(); cout << "after clear()" << endl; cout << "goodbit:" << cin.good() << endl; cout << "eofbit :" << cin.eof() << endl; cout << "failbit:" << cin.fail() << endl; cout << "badbit :" << cin.bad() << endl; int tmp; cin >> tmp; cout << "second num: " << tmp << endl; system("pause"); return 0;}/*没有cin.clear()的输出:first num :10^Zfirst num is:10goodbit:0eofbit :1failbit:1badbit :0second num: 6422400请按任意键继续. . .*//*first num :10^Zfirst num is:10goodbit:0eofbit :1failbit:1badbit :0after clear()goodbit:1eofbit :0failbit:0badbit :011second num: 11请按任意键继续. . .*/