我正在尝试从两个文件中读取内容,并通过两个循环逐行比较它们。第一个循环逐行通过正确的文件。第二个循环一次打印另一个文件中的所有内容,并将该文件中的每个元素与原始元素进行比较。
我的问题是,我可以使用getline(file,string)在循环的第一遍中读取第二个文件中的行,但是当我尝试再次运行循环时却看不到值。 这是代码:
string userAttempts;
string correctNames;
ifstream nameFile;
nameFile.open("names.txt");
ifstream attemptsFile;
attemptsFile.open("attemptsFile.txt");
while (i < 25)
{
j = 0;
i++;
getline(nameFile, correctNames);
cout << "Outer: " << i << endl;
while (j < 10)
{
j++;
getline(attemptsFile, userAttempts);
cout << userAttempts << endl;
}
}
输出:
Outer: 1
Kid
John
Yes
Time
Yeet
this
hello
Just Kidding
Names
Are
Outer: 2
empty
如您所见,外部2为空,这是循环的第二遍。谢谢您的帮助。
答案 0 :(得分:4)
问题很可能是,一旦您阅读了attemptsFile
的所有内容,那么您实际上已经阅读了所有内容。该文件不会自动从头开始重新读取。
如果要执行此操作,则需要再次明确地seek返回文件的第一位置。还是为什么不定义attemptsFile
并在外部循环中打开它?
因此循环应如下所示:
for (unsigned i = 0; i < 25 && getline(nameFile, correctNames); ++i)
{
ifstream attemptsFile("attemptsFile.txt")
for (unsigned j = 0; j < 10 && getline(attemptsFile, userAttempts); ++j)
{
// ...
}
}
如果要读取文件的所有内容而不是固定的行数,请使用例如
while (getline(nameFile, correctNames))
{
// ...
}
相反。