可能重复:
从文本文件中读取直到 EOF 重复最后一行
我的 c++ 程序的 cout 输出打印到控制台但重叠。
例如:
while(pFile.good()){
getline (pFile, pLine);
cout<<pLine;
}
此代码打印最后一行,以及前一行的一些剩余部分。
我在cygwin上使用vi。这件事突然发生了。我是否更改了某些设置?
可能重复:
从文本文件中读取直到 EOF 重复最后一行
我的 c++ 程序的 cout 输出打印到控制台但重叠。
例如:
while(pFile.good()){
getline (pFile, pLine);
cout<<pLine;
}
此代码打印最后一行,以及前一行的一些剩余部分。
我在cygwin上使用vi。这件事突然发生了。我是否更改了某些设置?
getline()
丢弃它遇到的任何换行符。为了防止您的代码将所有行合并为一个大行,您需要这样做:
cout << pLine << endl;
正如克里斯指出的那样,您也应该使用getline()
作为您的while
条件。否则,流现在可能被认为是“好”的,但是当您调用getline()
. 所以试试这个循环:
while (getline(pFile, pLine)) {
cout << pLine << endl;
}
在这里你写在同一行,因为 getline 只是丢弃换行符,这就是你必须写的原因<<endl
while(pFile.good()){
getline (pFile, pLine);
cout<<pLine<<endl;
}
最后一行打印两次的原因是因为您上次调用 getline() 失败,但您仍然打印pLine
(即使其内容未定义)。
while(pFile.good()){
getline (pFile, pLine); // What happens if this line fails.
// Like when you read **past** the end of file.
cout<<pLine;
}
您的代码的正确版本是:
while(pFile.good()){
if (getline (pFile, pLine))
{ cout<<pLine;
}
}
但这通常写成:
while(getline (pFile, pLine))
{
// The loop is only entered if the read worked.
cout<<pLine;
}
请记住,对 getline() 的最后一次成功调用读取到但不超过行尾。这意味着对 getline() 的下一次调用将失败并设置 EOF 位。
另请注意,您的输出相互刺痛,因为您没有在行之间添加 '\n' 分隔符。注意:getline() 会读取到下一个 '\n' 字符,但此终止字符不会添加到字符串pLine
中。