我创建了此函数以返回文本文件中的行数:

int numberOfLinesInFile(string dataFile){
    ifstream inputFile;
    inputFile.open("data.txt");
    int numberOfLines, data;

    while(!inputFile.eof()){
        inputFile >> data;
        numberOfLines++;
    }

    cout << "Number of lines: " << numberOfLines << endl;
    inputFile.close();
    return numberOfLines;
}
我注意到的一件有趣的事是该函数正确计算了非空白行的数量(末尾还有一个额外的空白行),但是没有计算额外的空白行。例如,如果这是我的文件:
234
453
657

然后该函数返回4,因为文本文件中有四行。但是,如果我的文件末尾包含多个空白行:
234
453
657



该函数再次返回4
为什么会这样呢?这和eof指令有关吗?

编辑:
好的,谢谢@MikeCAT,让我了解问题出在哪里。基于@MikeCAT的答案,我将while循环更改为:
while(!inputFile.eof()){
        if(inputFile >> data)
            numberOfLines++;
        else{
            cout << "Error while reading line " << numberOfLines + 1 << "!" << endl;
        }
}
我在增加numberOfLines时未确保实际读取了该行。

最佳答案

首先,您在numberOfLines++;之后执行inputFile >> data;,而不检查读取是否成功。这是不好的,并导致额外的计数。
其次,inputFile >> data;读取整数,并在整数之前跳过空格字符。
为了避免这些问题,您应该使用 std::getline() 对行进行计数。
同样不要忘记初始化numberOfLines

int numberOfLinesInFile(string dataFile){
    ifstream inputFile;
    inputFile.open("data.txt");
    int numberOfLines = 0;
    std::string data;

    while(std::getline(inputFile, data)){
        numberOfLines++;
    }

    cout << "Number of lines: " << numberOfLines << endl;
    inputFile.close();
    return numberOfLines;
}

关于c++ - (C++)为什么不计算文本文件中的其他空白行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64074026/

10-09 05:13