c – 如何从字符串流中提取double

在处理我的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
}
上一篇:c – 字符串流的不明确的过载


下一篇:c – stringstream.read()是否使用流?