0

我有一个使用 ifstream 读取文件的应用程序。我在每行的文件中有 1000 个数字。我的应用程序应该阅读所有这些行。

但是当我的行数少于 800 时,它显示计数为 0,为什么会这样。代码如下。

int tmp, count=0,ucount=0; 

ifstream fin("rnum.txt");
while(fin >> tmp)
{
    count++;
}
cout<<"showing count: "<<count<<endl;
ucount=count;
fin.open("rnum.txt");
int i=0;
cout<<"Before entering loop"<<count<<endl;
while(fin >> tmp){
    iArray[i++]=tmp;
}

当我读取一个 1000 行的文件时,它也只读取 720 行。我不明白为什么它的阅读方式是这样的。

代码有什么问题吗。

我的要求是将行数 COUNT 带到 ucount 变量中。

4

4 回答 4

1

计算文件中的行数使用getline函数。

#include<string>

std::string line;
while (std::getline(fin, line))
{
    ++count;
}
于 2013-04-17T10:53:36.383 回答
0

您需要fin.close()在第二次打开文件之前关闭文件或保持文件打开,重置读取指针并清除 eof 标志。

于 2013-04-17T11:02:05.827 回答
0

这不会解决您的错误,因为我认为这与输入文件本身有关,但是读取文件一次至少会使其更快:

vector<int> iArray;
int tmp; 

ifstream fin("rnum.txt");
while (fin >> tmp)
{
    iArray.push_back(tmp);
}
cout << "showing count: " << iArray.size() << endl;
于 2013-04-17T10:57:54.000 回答
0

如果输入不正确(如果遇到字符而不是数字),>> 操作将失败并fin >> tmp返回 false,从而过早地中断循环。

此外,您应该在重新打开文件之前关闭文件。而且我相信您需要/想要的功能仅仅是fin.seekg(0).

除了您的代码可以简化为:

int temp;
ifstream fin("rnum.txt");
vector<int> iArray;
while(fin >> tmp)
{
    iArray.push_back(tmp);
}

std::cout << "showing count : " << iArray.size();

正如@trojanfoe 在https://stackoverflow.com/a/16058205/6459731中所建议的那样

于 2017-12-19T16:53:28.740 回答