C++逐行读取文件:有没有hasNextLine?

3

我正在读取类似以下的文件内容:

#include <iostream>
#include <fstream>
using namespace std;

char line[256];
ifstream infile(filename, ios::in);

if(infile){
    while (infile.getline(line, 256)) {
        std::cout << line << std::endl;
    }
}

在while循环中,我想在所有的n-1次迭代中都做一些事情,但不包括最后一次迭代(文件的最后一行)…所以我想到了类似于infile.hasNextLine()这样的东西,但不幸的是我没有找到任何可以实现这个功能的东西。
如何在C++中实现这种行为?
计算文件中的行数是唯一的方法吗?

无关的是,你很少想使用带有指向字符的重载的 getline 函数--通常你想要的是 std::string line; while (std::getline(infile, line)) ... - Jerry Coffin
2个回答

5
您可以使用 peek()
if (infile.peek()!=EOF) 
   ...

如果你已经读到了最后一行,那么就没有更多内容可读了,peek() 将返回 EOF。反过来,如果 peek() 返回其他内容,则意味着仍有数据可读取,下一行的内容就在等待中。

0

另一种方法是在2-n次迭代中执行您想要做的操作,并在第一次迭代中不执行。我猜您想在两行之间做一些事情?


逐行解析,着色,将行分组为两个一组,并对其进行其他处理,最后在读取最后一行之前在控制台上输出一些内容。 - daniel451

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接