Использование getline и istringstream для чтения из файла приводит к появлению нулей - PullRequest
0 голосов
/ 17 февраля 2012

У меня есть текстовый файл, который выглядит так:

6
1 2 3 4 5 6
1 2
1 4
1 5
2 3
2 5
2 6
3 4
3 6
4 5
5 6

Я использую следующее для чтения строк файла в мои переменные и массивы:

//Read first line
if( std::getline(in, line))                                                                                                                                                                                                              
    {                                                                                                                                                                                                                                        
        std::istringstream iss(line);                                                                                                                                                                                                        
        while( iss >> a);                                                                                                                                                                                                           
    }                                                                                                                                                                                                                                        

    // read second line                                                                                                                                                                                                 
    int i = 0;                                                                                                                                                                                                                               
    if( std::getline(in, line) )                                                                                                                                                                                                             
    {                                                                                                                                                                                                                                        
        std::istringstream iss(line);                                                                                                                                                                                                        
        while( iss >> b[i] )                                                                                                                                                                                                          
        {                                                                                                                                                                                                                                    
            ++i;                                                                                                                                                                                                                             
        }                                                                                                                                                                                                                                    
    }                                                                                                                                                                                                                                        

    // read rest of file matrix                                                                                                                                                                               
    int x = 0;                                                                                                                                                                                                                               
    while( !in.eof())                                                                                                                                                                                                                        
    {                                                                                                                                                                                                                                        
        if( std::getline(in, line))                                                                                                                                                                                                          
        {                                                                                                                                                                                                                                    
            std::istringstream iss1(line);                                                                                                                                                                                                   
            while( iss1 >> c[x])                                                                                                                                                                                                         
            {                                                                                                                                                                                                                                
                ++x;                                                                                                                                                                                                                         
            }                                                                                                                                                                                                                                
        }                                                                                                                                                                                                                                    
    }     

В приведенном выше коде a - это int, b и c - это массивы int, in - это оператор istream, а line - это std::string. Однако, похоже, что он работает нормально, когда я std::cout для переменной и массивов получаю следующее:

6
1,2,3,4,5,6
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

По какой-то причине массив c кажется заполненным всеми нулями вместо данных из файла. Это странно для меня, так как я читаю первые две строки точно так же, и они, кажется, читают очень хорошо. Есть идеи?

1 Ответ

0 голосов
/ 17 февраля 2012

Я наконец понял это и решил опубликовать это здесь для будущих людей. В итоге я реализовал функцию ниже, и она работала правильно.

// declare the variables to be used
    int a, b, c, d, e;
    std::string line;

    // open file for reading
    in.open(file);

    in >> a;
    std::cout << a << '\n';

    for(int i=0; i<a; ++i)
        in >> b

    in >> c;

    for(int i = 0; i < c; ++i)
    {    
        in >> d >> e;

        // push to vector here
    }

    in.close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...