gpt4 book ai didi

c++ - (C++)为什么不计算文本文件中的其他空白行?

转载 作者:行者123 更新时间:2023-12-02 09:58:20 24 4
gpt4 key购买 nike

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com