【问题标题】:C++ can't get number of lines txt file [closed]C ++无法获取txt文件的行数[关闭]
【发布时间】:2023-03-23 04:25:01
【问题描述】:

我正在尝试获取 txt 文件中的行数。这是我一直在尝试实现的方法,但它会打印 n=1。

#include <iostream>
#include <string>
#include <fstream>
#include <cmath>
#include <iomanip>

using namespace std;

int main(){
    int n=0;
    string line;

    ifstream fdatos;
    fdatos.open("temp_toma5.txt");
    
    while (!fdatos.eof()){
        getline(fdatos, line);
        n++;
    }

    cout<<"n = "<<n<<endl<<endl;
    fdatos.close();
return 0;
}

这是文件的结构

0   0.03    0
5   0.03    0.01
10  0.02    0
15  0.02    0
20  0.02    0
25  0.03    0
30  0.03    0

在此感谢您

【问题讨论】:

标签: c++ line eof txt


【解决方案1】:

你应该这样做

while (getline(fdatos, line))
    ++n;

getline 在文件末尾返回 false,因为它选择了一个“空行”。

完整的工作 sn-p

#include <iostream>
#include <string>
#include <fstream>

int main(){

    int n = 0;
    std::string line;
    std::ifstream fdatos("temp_toma5.txt");

    while (std::getline(fdatos, line))
        ++n;

    std::cout << "n = " << n << "\n\n";

    fdatos.close();
    return 0;
}

给出正确答案n = 7

user4581301的评论指向explanation

【讨论】:

  • 我需要在这里拆分一些头发...getline 不会“在文件末尾返回 false”。它总是返回一个流引用。当您以这种方式使用返回值时,流被隐式转换为 bool,为流调用 bool 运算符重载,以测试是否设置了 fail 位。这表明读取失败,这可能是由于文件结束 并且 没有读取字符,或者流被关闭,或者其他一些 I/O 错误。在这种情况下,运算符返回 false。如果没有发生故障,则返回 true。
  • 没错,它返回一个对输入流的引用,标准对此有明确的布尔转换定义en.cppreference.com/w/cpp/io/basic_ios/operator_bool抱歉我的草率。
  • 我没有把这个问题作为一个重复来关闭,因为我们不确定这是提问者正在寻找的错误。这绝对是一个错误,但据我们所知,他们没有成功打开文件,因为 temp_toma5.txt" 不在工作目录中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 2016-05-07
  • 2021-12-28
  • 2018-08-10
  • 1970-01-01
相关资源
最近更新 更多