c++ - 不使用 getline() 计算文件中的行数

标签 c++

我想从文件中获取一些数据并将其放入变量中。但是之前,我不知道这个文件的长度。文件看起来像:

 1 12 4
 2 14 5
 3 26 6
 . .. .

这就是为什么我想得到一些行来知道我需要在循环中创建多少变量。在这段代码中,我创建了 3 个变量 (a、b、c) 来尝试。问题是程序结束后 a、b、c 只是随机数,而不是 1、12 和 4。 我注意到如果我这样写:

file >> a >> b >> c;

在 while 循环之前它可以工作,但我需要更早的行数。 那么如何计算不使用 getline() 的行数呢?

int a, b, c;
fstream file;
file.open("abc.txt",ios::in);

if (file.good() == true)
{
    int lines_amount=0;
    string test; 



    while (getline(file,test))
    {
        lines_amount++;
    }
    file >> a >> b >> c;

    file.close();
}

最佳答案

当你使用

while (getline(file,test))
{
      lines_amount++;
}

while 循环仅在读取了文件中的所有内容后才停止。线路

file >> a >> b >> c;

不将任何内容读入abc。这些变量的值是你得到的一些随机值,因为它们之前没有被初始化。

将它们初始化为:

int a = 10, b = 20, c = 30;

你会注意到:

  1. 如果您使用 C++11 之前的编译器,这些变量的值将保持不变。
  2. 如果您使用 C++11 或更高版本的编译器,这些变量的值将被设置为 0。

为了能够从文件的开头读取数字,请将其倒回到顶部。您可以为此使用 std::ifstream::seekg。不过,您必须先清除它的 eofbit

file.clear();
file.seekg(std::ifstream::beg);

关于c++ - 不使用 getline() 计算文件中的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48046960/

相关文章:

c++ - std::vector 构造函数中的 bad_alloc

c++ - 用三元运算符抛出

c++ - "doesn' t synthesize"和 "defined as deleted"有什么区别?

c++ - 钻石传承

c++ - C++/CX 和 C++/WinRT 可以在同一个项目中使用吗?

c++ - 如何删除Qtreewidget中的虚线分支

C++ 字符串和设置/获取函数

c++ - Qt : How to get all the classes that are children of a specific class

java native loadlibrary 无法加载库 - Linux fedora25 java8

c++ - 为什么 `is_open()` 是非常量?