[C++] 关于stringstream ss.fail()的问题
高洛峰
高洛峰 2017-04-17 13:29:48
0
1
726
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

    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板
    关于我们 免责声明 Sitemap
    PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!