c++流状态的查询和控制(五)

2013-12-12 14:45:24 · 作者: · 浏览: 522

 

  运行结果

  注意:如果读了n个字符,后面这个正好是停止字符,那么都读出来干掉(例子的最后一个)!

  numeric_limits<streamsize>::max() 此时读取的为最大长度,已经没有界限,只能靠停止符终止。本例中为'\n',即从回车后开始读取

  5. 为何必须有ignore()函数

  cin.clear()把failbit位清零,但是错误的输入(不是指回车)还是在缓冲区,每次一读错误就做相同的处理,如果没有ignore(),那么当输入错误时,就会无限循环。并且还不是简单的cin.ignore(),默认的为ignore(1, '\n'),这样会导致输入几个错误的字符循环几次,例如

  while(cin 》 val, 1)

  {

  cout 《 "hello " 《 endl;

  cin.clear();

  cin.ignore();

  }