C++11 getline()多次读取第一行

C++11 getline()多次读取第一行,c++11,getline,C++11,Getline,为什么getline()只读取第一行多次?我还尝试在while循环中使用getline(),但它给出了相同的结果 void closestPair(char inFile[50],char outFile[50]) { int num1,num2; int i =0; string line =""; stringstream ss; ifstream fp(inFile); while(!fp.eof()) { g

为什么getline()只读取第一行多次?我还尝试在while循环中使用getline(),但它给出了相同的结果

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

void closestPair(字符填充[50],字符输出[50])
{
int num1,num2;
int i=0;
字符串行=”;
细流ss;
ifstream fp(infle);
而(!fp.eof())
{
getline(fp,line);
ssnum1>>num2;
A[i].x=num1;
A[i].y=num2;
i++;
printf(“%d%d\n”,num1,num2);
}
fp.close();
} 
我的输入文件:

13

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

请参阅关于(!fp.eof())

我的猜测是,
ss
ss>>num1>>num2之后到达文件结束状态首次运行。一旦设置了
eof
位,该流上所有后续调用都将失败,因此
num1
num2
保留其原始值
getline
很可能工作正常(要检查这一点,请打印
line
)。我尝试打印“line”,它给出了相同的结果,因为
line
读取正确。它从
中提取两个数字失败。是的,工作正常,但结构数组A中的值存储不正确,它存储所有零
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();
}