如何检测 istream 提取是否失败?
string s("x");
stringstream ss(s);
int i;
ss >> std::ios::hex >> i;
编辑——虽然问题标题涵盖了这一点,但我忘了在正文中提及:我真的想检测失败是否是由于格式错误(即解析)或由于任何其他 IO 相关问题造成的,以便提供正确的解决方案反馈( malformed_exception("x") 或其他)。
if(! (ss >> std::ios::hex >> i) )
{
std::cerr << "stream extraction failed!" << std::endl;
}
就是这么简单。
ETA:这是此测试如何与流末尾交互的示例。
int i;
std::stringstream sstr("1 2 3 4");
while(sstr >> i)
{
std::cout << i << std::endl;
if(sstr.eof())
{
std::cout << "eof" << std::endl;
}
}
将打印
1
2
3
4
eof
如果你要检查sstr.eof()
or sstr.good()
在 while 循环条件下,4 将不会被打印。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)