首頁  >  問答  >  主體

[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 天前753

全部回覆(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
  • 取消回覆