(C++) 为什么不计算文本文件中的额外空行?
(C++) Why are additional blank lines in the text file not being counted?
我创建了这个函数来 return 文本文件中的行数:
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
然后函数 returns 4
,因为文本文件中有四行。但是,如果我的文件末尾包含多个空行:
234
453
657
函数 returns 4
再次。
为什么会这样?这与eof
指令有关吗?
编辑:
好的,谢谢@MikeCAT 让我明白了问题出在哪里。根据@MikeCAT 的回答,我将 while
循环更改为:
while(!inputFile.eof()){
if(inputFile >> data)
numberOfLines++;
else{
cout << "Error while reading line " << numberOfLines + 1 << "!" << endl;
}
}
我在递增 numberOfLines
时不确定是否实际读取了该行。
首先,您在 inputFile >> data;
之后执行 numberOfLines++;
而不检查读取是否成功。这很糟糕,会导致额外的计数。
其次,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;
}
我创建了这个函数来 return 文本文件中的行数:
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
然后函数 returns 4
,因为文本文件中有四行。但是,如果我的文件末尾包含多个空行:
234
453
657
函数 returns 4
再次。
为什么会这样?这与eof
指令有关吗?
编辑:
好的,谢谢@MikeCAT 让我明白了问题出在哪里。根据@MikeCAT 的回答,我将 while
循环更改为:
while(!inputFile.eof()){
if(inputFile >> data)
numberOfLines++;
else{
cout << "Error while reading line " << numberOfLines + 1 << "!" << endl;
}
}
我在递增 numberOfLines
时不确定是否实际读取了该行。
首先,您在 inputFile >> data;
之后执行 numberOfLines++;
而不检查读取是否成功。这很糟糕,会导致额外的计数。
其次,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;
}