getline () читает первую строку несколько раз - PullRequest
0 голосов
/ 20 сентября 2019

Почему getline () читает только первую строку несколько раз?Я также пытался использовать getline () в цикле while, но он дает тот же результат. Есть какая-то конкретная причина, почему это происходит?

void closestPair(char inFile[50],char outFile[50])
{
    int num1,num2;
    int i =0;
    string line ="";
    stringstream ss;
    ifstream fp(inFile);    
    while(!fp.eof())
    {
        getline(fp,line);
        ss<<line;
        ss>>num1>>num2;
        A[i].x = num1;
        A[i].y = num2;
        i++;
        printf(" %d %d \n", num1, num2);
    }
fp.close();
} 

мой входной файл:

1 3

4 6

7 9

8 5

2 5

выход: 1 3 1 3 1 3 1 3 1 3

1 Ответ

0 голосов
/ 20 сентября 2019

Я бы предложил изменить область действия ss, чтобы увидеть предсказуемые результаты.

void closestPair(char inFile[50],char outFile[50])
{
    int num1,num2;
    int i =0;
    string line ="";
    ifstream fp(inFile);    
    while( getline(fp, line) )
    {
        stringstream ss;  // Move it inside the loop.
        ss<<line;
        ss>>num1>>num2;
        A[i].x = num1;
        A[i].y = num2;
        i++;
        printf(" %d %d \n", num1, num2);
    }
    fp.close();
} 

Еще лучше, построить std::ostringstream из line и использовать его для извлечения чисел.

void closestPair(char inFile[50],char outFile[50])
{
    int num1,num2;
    int i =0;
    string line ="";
    ifstream fp(inFile);    
    while( getline(fp, line) )
    {
        std::ostringstream ss(line);
        ss>>num1>>num2;
        A[i].x = num1;
        A[i].y = num2;
        i++;
        printf(" %d %d \n", num1, num2);
    }
    fp.close();
} 

См. Почему iostream :: eof внутри условия цикла (т. Е. `While (! Stream.eof ())`) считается неправильным? относительно while(!fp.eof()).

...