我创建了此函数以返回文本文件中的行数:
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/