Парсинг строкового потока, перебирающий контент, не работает

У меня есть следующий код для извлечения двойных значений из строки потока, но по какой-то причине я не могу перебрать поток, он просто загружает первое значение в потоке и затем завершает какое-то время, в обоих случаях (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: -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

1 ответ

Решение

Вам нужно извлечь в двойное число вместо целого, иначе будет установлен бит сбоя потоков.

Вы также хотите прекратить, а не продолжить, на eof. В любом случае проверка eof на самом деле не нужна, так как преобразование потока в bool в любом случае выдаст false.

double i = 0.0;
while (ss_fija >> i)
{
    vector_pois_fija.push_back(i);

    if (ss_fija.peek() == ';')
        ss_fija.ignore();
}
Другие вопросы по тегам