我有以下代码从streamtring中检索double值但由于某种原因我不能遍历流,它只是加载流中的第一个值然后退出while,在两种情况下(i和f) )见下文:
std::string pois_fija_lista = argv[11];
std::string pois_flotante_lista= argv[12];
std::vector<double> vector_pois_fija(8), vector_pois_flotante(8);
std::stringstream ss_fija(pois_fija_lista), ss_flotante(pois_flotante_lista);
int i=0;
while (ss_fija >> i || ss_fija.eof())
{
vector_pois_fija.push_back(i);
if (ss_fija.peek() == ';')
ss_fija.ignore();
}
int f=0;
while (ss_flotante >> f || ss_flotante.eof())
{
vector_pois_flotante.push_back(f);
if (ss_flotante.peek() == ';')
ss_flotante.ignore();
}
仅供参考,从argv获取的stringstream中的值为: -461.3175; -417.031983203125; -523.8393; -417.031983203125; -491.6311; -518.393083203125; -490.6838; -512.709283203125
和
-102.287501220703; -54.613701647949; -164.809301220703; -54.613701647949; -132.601101220703; -155.974801647949; -131.653801220703; -150.291001647949
答案 0 :(得分:3)
您需要提取为double而不是int,否则将设置streambitsbit。
你也想在eof上终止而不是继续。无论如何都不需要执行eof检查,因为无论如何将流转换为bool都会产生错误。
double i = 0.0;
while (ss_fija >> i)
{
vector_pois_fija.push_back(i);
if (ss_fija.peek() == ';')
ss_fija.ignore();
}