在处理我的C项目时,我发现在使用stringstream对象时有些奇怪:我无法使用>>从字符串流中提取双精度数.
考虑这个例子:
#include <string>
#include <sstream>
int main(int argc, const char * argv[]) {
std::string string("1000 ; 523277527397538 ; 0.183 ; 0.453 ; 0.5 ; 0.5 ; 0.033 ; 0 ; 0 ;");
std::stringstream stringstream(string);
int integer;
char character;
double doubleprec;
stringstream >> integer >> character;
stringstream >> integer >> character;
stringstream >> doubleprec >> character;
stringstream >> doubleprec >> character;
return 0;
}
使用我的调试器我注意到变量integer首先取值1000,然后取值523277527397538(正如我所料),但doubleprec始终取值0.
这是为什么?我错过了有关流如何工作的内容吗?
解决方法:
只有第一个流输出语句:
stringstream >> integer >> character;
很成功.其余三个不是由于你的int变量不能保持值523277527397538这一事实.将它改为long long:
long long integer;
当流提取未能将523277527397538数字文字放入您的变量时,则设置字符串流的failbit并且后续对字符串流提取的调用也会失败.一种好的方法是在使用流IO时使用if语句:
if (stringstream >> integer >> character){
// success
}