c++ - Stringstream 将值读入 double 失败?

标签 c++ stringstream

新问题

boost::tokenizer<> token(line);标记小数点!我怎样才能阻止这种情况发生?

下面之前的问题现已解决。

我正在尝试将字符串流中的值获取到 double vector 中。

std::ifstream filestream;
filestream.open("data.data");
if(filestream.is_open()){
    filestream.seekg(0, std::ios::beg);

    std::string line;
    std::vector<double> particle_state;
    particle_state.resize(6);
    while(filestream >> line){

        boost::tokenizer<> token(line);

        int i = -1;
        for(boost::tokenizer<>::iterator it=token.begin(); it!=token.end(); ++it){
            std::cout << *it << std::endl; // This prints the correct values from the file.

            if(i == -1){
                // Ommitted code
            }

            else{
                std::stringstream ss(*it);
                ss >> particle_state.at(i); // Offending code here?
            }
            i ++;
        }
        turbovector3 iPos(particle_state.at(0), particle_state.at(1), particle_state.at(2));
        turbovector3 iVel(particle_state.at(3), particle_state.at(4), particle_state.at(5));
        // AT THIS POINT: cout produces "(0,0,0)"
        std::cout << "ADDING: P=" << iPos << " V=" << iVel << std::endl;

    }


    filestream.close();
}

输入文件的内容:

electron(0,0,0,0,0,0);
proton(1,0,0,0,0,0);
proton(0,1,0,0,0,0);

关于 turbovector3 的更多信息:

turbovector3是一个数学 vector 类。 (重要的是它有效——本质上它是一个包含 3 个项目的 vector 。它是使用具有三个 double 值的构造函数初始化的。)

在此先感谢您的帮助!

编辑 修改代码:

std::stringstream ss(*it);
if(ss.fail()){
  std::cout << "FAIL!!!" << std::endl; // never happens
}
else{
  std::cout << ss.str() << std::endl; // correct value pops out
}
double me;
ss >> me;
std::cout << "double:" << me << std::endl; // correct value pops out again
particle_state.at(i) = me; // This doesn't work - why?

最佳答案

你在省略的代码中增加了i吗?如果不是,则永远不会调用您的 else 子句。尝试输出 stringstream 缓冲区内容:

  std::cerr << ss.str();

同时检查从 ss 读取是否真的失败了:

  if (ss.fail())
      std::cerr << "Error reading from string stream\n";

关于c++ - Stringstream 将值读入 double 失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15230144/

相关文章:

c++ - Qt 中不一致的 XML 符号

c++ - 当用户单击GTK + 3.0中的GtkFileChooser或GtkFileChooserButton时,如何触发事件?

c++ - cmake CMakeLists.txt 文件中的 CXX 中的 "XX"是什么

c++ - 在 C++ 中拆分一个字符串(使用 strtok?),用逗号分隔符分隔并且不使用外部库?

c++ - 忽略来自 stringstream 的值(比如 sscanf 中的 %*f)

c++ - 带符号的十六进制数字的格式化输出

c++ - 读取具有任意数量空格的输入字符串的一部分

c++ - QuickFIX 处理修复消息的线程数

C++: vector 到字符串流

c++ - 如何读取动态大小的stringstream?