输入流的缓冲区问题

  今天在做题发现,执行如下程序,当输入完第一个循环的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循环的条件,以达到目的

  

  

posted @ 2017-09-08 16:02  bw98  阅读(182)  评论(1编辑  收藏  举报