大家好我写代码而我的文件输出两次单词?帮助
这是课堂的方法。我打电话给主程序。创建列表没问题,但显示是有问题的。
它显示了一些项目两次,主要是最后一项。
option
答案 0 :(得分:2)
不要while (infile.good())
(或while (!infile.eof())
),因为它不会按预期工作(正如您所注意到的)。相反,例如, while (getline(...))
。
问题是,在您尝试从读取文件末尾之后才会设置eofbit
标志,因为没有可靠的方法来检测文件末尾直到你真正达到它并试图超越它。这导致像while (infile.good())
这样的循环迭代一次到多次,然后循环内的所有getline
调用都将失败(第一次调用设置eofbit
标志),但是因为你没有& #39; t检查循环内部是否会打印出无效数据。
而是依赖于std::getline
返回流对象(或者更确切地说是对它的引用)以及流可以be used in a boolean expression的事实。因此,如果getline
调用失败,则在getline
返回时将在流中设置正确的标志,并且当在停止循环的条件中使用时,流将评估为false
。 / p>
答案 1 :(得分:0)
尝试在循环中使用它:
*while (infile >> authr1 >> titl1 >> publishr1 >> priz >> stok)
cout<< authr1 << titl1 << publishr1 << priz << stok << endl;*
直到你真正读到eof才会到达eof所以while(infile.good())不会工作。