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())
。
为什么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())
。