首页  >  问答  >  正文

[C++] 关于stringstream ss.fail()的问题

  int i = 0;
  getline(cin, s);
  ss.clear(); ss.str(s);
  while(!ss.fail()) 
    ss >> H[i++]; 

假如getline读入了1 2 3 4, 这段代码运行结束后, i的值为5. 这是为什么?
请问ss.fail()是以什么来判断的?

高洛峰高洛峰2765 天前789

全部回复(1)我来回复

  • 天蓬老师

    天蓬老师2017-04-17 13:31:48

    请问ss.fail()是以什么来判断的?

    根据ss对象的failbitbadbit的状态来判断的。

    i的值为 5,这是为什么?

    因为读入最后一个数字 4 之后,ss仍处于正常状态,只有再尝试读入(即第5次循环)才会出错。你可以试试输入空行,i的值为 1。

    常用实践为:

    int i = 0;
    getline(cin, s);
    ss.clear(); ss.str(s);
    while(ss >> H[i++]) { }

    参考

    • std::basic_ios::fail

    • std::basic_stringstream

    回复
    0
  • 取消回复