我碰巧遇到了一个代码示例,用于从文件中读取文本,如下所示:
int i;
char *fileName = "text.txt";
ifstream fin(fileName);
while (fin >> i)
{
do something;
}
此代码实际打开并读取以空格分隔的文本,但我不明白它是如何工作的。如果没有“打开”或“读取”命令,文件如何打开?有没有办法倒回到文件的开头?我正在尝试创建一个动态分配的数组,在我通过文件计算得分数之前,我不知道该怎么做。
答案 0 :(得分:0)
如果没有"打开"文件是如何打开的?或"阅读"命令?
ifstream
构造函数将打开该文件。
有没有办法倒回到文件的开头?
使用seekg()
。如果已达到EOF,则需要在致电seekg()
之前致电clear()
。
我试图创建一个动态分配的数组
如果允许,您可以使用std::vector
来存储读取的文本,这样可以避免必须两次读取文件的内容。
答案 1 :(得分:0)
该文件由std::ifstream
类的构造函数打开。
您可以使用fin.seekg(std::ios::beg);
来回放文件,但最好是例如使用std::vector
或std::list
,您可以使用push_back()
来推送新元素,而无需事先知道元素的数量。
然而,由于家庭作业显然明确要求你使用手动分配的数组和指针,这样的事情就可以完成这项工作:
#include <fstream>
#include <iostream>
#include <iterator>
int main()
{
std::ifstream fin("text.txt");
size_t n = 0;
int i;
for (; fin >> i; ++n);
fin.clear();
fin.seekg(0, std::ios::beg);
int *scores = new int[n];
std::istream_iterator<int> first(fin), last;
std::copy(first, last, scores);
std::copy(scores, scores+n, std::ostream_iterator<int>(std::cout, " "));
std::cout << "\n";
delete[] scores;
}