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

查看:421
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆