首页 > 开发 > C++ > 正文

Linux c++ 使用fstream重复读取最后一行的问题

2017-09-11 21:23:10  来源: 网友分享

在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')来按行读取。