[C++] 关于stringstream ss.fail()的问题
高洛峰
高洛峰 2017-04-17 13:29:48
0
1
796
  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()是以什么来判断的?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回覆(1)
Peter_Zhu

請問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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板