getline() 多次读取第一行

getline() reads first line multiple times

为什么getline()多次只读取第一行?我也尝试在 while 循环中使用 getline() 但它给出了相同的 result.Any 发生这种情况的具体原因?

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

我建议更改 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();
} 

更好的是,从 line 构造一个 std::ostringstream 并用它来提取数字。

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();
} 

参见 Why is iostream::eof inside a loop condition (i.e. `while (!stream.eof())`) considered wrong? 关于 while(!fp.eof())