c++ - getline 方法仅在嵌套循环中工作一次
问题描述
我正在尝试从两个文件中读取并用两个循环逐行比较它们。第一个循环逐行遍历正确的文件。第二个循环一次打印另一个文件中的所有内容,并将该文件中的每个元素与原始元素进行比较。
我的问题是我能够使用 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 为空,这是第二次通过循环。谢谢您的帮助。
解决方案
问题很可能是,一旦您阅读了所有内容,attemptsFile
那么您实际上已经阅读了所有内容。该文件不会自动重新从头开始读取。
如果你想这样做,你需要再次明确地回到文件的第一个位置。或者为什么不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))
{
// ...
}
反而。
推荐阅读
- arrays - 为 Alamofire POST 请求 Swift 4 创建主体
- c++ - 如何打印没有空格作为输入的整数?
- subquery - SQL Oracle 子查询
- linux - 检查 Linux 包然后跳过
- python - Keras load_model 和 get_default_graph.finalize()
- javascript - 当孩子集中注意力时,焦点控制下拉菜单会关闭
- unity3d - 用触摸向各个方向移动玩家?,Unity
- android - 以米为单位获取 TransformableNode 大小
- sql-server - 在插入 SQL Server 中使用 if 条件
- oracle - 为什么我不能从集合(数组)PLSQL 中删除元素