Linux c++ 使用fstream重复读取最后一行的问题
本文介绍了Linux c++ 使用fstream重复读取最后一行的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
在linux下使用C++读取input.txt文件时,最后一行会重复读取,网上找到的解决办法无用,请各位大神给个解决办法,下面是一些关键代码。
while(!infile.eof())//
{
infile >> num_str;
... ...
/*下3行解决最后一行重复读取的问题*/
infile.get(); //读取最后的回车符,
if(infile.peek() == '\n') //观察该字符,指针不后移
{ infile.clear();
break;
}
}
最后一行仍会重复读取。
解决方案
while (!input.eof()) {
input >> str;
std::cout << str;
}
不会重复读取最后一行,但是会重复输出最后一次读到的内容。这是因为input完成最后一次读取后不会立即设置eof状态,所以程序会再进行一轮循环,在这轮循环input才会设置eof状态。结果就是最后一次读取的内容被输出了两次。
改为
while (input >> str) {
std::cout << str;
}
或
for(;;) {
if (!(input >> str))
break;
std::cout << str;
}
也可以考虑用getline(input, str, '\n')
来按行读取。
这篇关于Linux c++ 使用fstream重复读取最后一行的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文