我想从文件中获取一些数据并将其放入变量中。但是之前,我不知道这个文件的长度。文件看起来像:
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;
不将任何内容读入a
、b
或c
。这些变量的值是你得到的一些随机值,因为它们之前没有被初始化。
将它们初始化为:
int a = 10, b = 20, c = 30;
你会注意到:
- 如果您使用 C++11 之前的编译器,这些变量的值将保持不变。
- 如果您使用 C++11 或更高版本的编译器,这些变量的值将被设置为 0。
为了能够从文件的开头读取数字,请将其倒回到顶部。您可以为此使用 std::ifstream::seekg
。不过,您必须先清除它的 eofbit
。
file.clear();
file.seekg(std::ifstream::beg);
关于c++ - 不使用 getline() 计算文件中的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48046960/