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