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

【字号: 日期:2023-05-15浏览:23作者:雯心

问题描述

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

问题解答

回答1:

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

根据ss对象的failbit和badbit的状态来判断的。

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

相关文章: