今天在做题发现,执行如下程序,当输入完第一个循环的cin并发出一个EOF标志后,程序并没有达到第二个循环,而是直接结束。
错误程序代码如下:
while(cin >> t1) { } while(cin >> t2) { }
经分析后发现,由于cin的缓冲区问题,无法从键盘中输入t2,因为在发EOF后,到达while(cin >> t2) 时,编译器发现cin存在值可输入t2,因此就直接将cin的缓冲区的值输入到t2里随后结束程序
解决办法:
添加下列成员函数,刷新cin缓冲区,令cin无值可输入t2即可
- cin.clear(); //清理缓冲区
- cin.ignore(); //忽略下一次输入的第一个字符
- cin.sync(); //同步,更新缓冲区,常与成员函数clear();连用
其他方法:利用">>"的赋值特性或不把cin作为while循环的条件,以达到目的