>  Q&A  >  본문

[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()是以什么来判断的?

高洛峰高洛峰2715일 전755

모든 응답(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
  • 취소회신하다