我正在尝试创建一个单词排序程序,它将读取.txt文件中的单词,然后按照从最短单词到最长单词的顺序将它们写入新文件。因此,例如,如果第一个文件包含:
象
狗
小鼠
程序执行完毕后,我希望第二个文件(最初为空白)包含:
狗
小鼠
象
以下是代码:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
string word;
ifstream readFrom;
ofstream writeTo;
readFrom.open("C:\\Users\\owner\\Desktop\\wordlist.txt");
writeTo.open("C:\\Users\\owner\\Desktop\\newwordlist.txt");
if (readFrom && writeTo)
{
cout << "Both files opened successfully.";
for (int lettercount = 1; lettercount < 20; lettercount++)
{
while (readFrom >> word)
{
if (word.length() == lettercount)
{
cout << "Writing " << word << " to file\n";
writeTo << word << endl;
}
}
readFrom.seekg(0, ios::beg); //resets read pos to beginning of file
}
}
else
cout << "Could not open one or both of files.";
return 0;
}
对于for循环的第一次迭代,嵌套的while循环似乎工作正常,将正确的值写入第二个文件。但是,在for循环的所有下一次迭代中出现问题,因为没有其他单词写入文件。那是为什么?
非常感谢你。
答案 0 :(得分:1)
寻找后,清除EOF标志。
readFrom.clear();
答案 1 :(得分:1)
while (readFrom >> word)
{
}
readFrom.seekg(0, ios::beg); //resets read pos to begin
while循环将继续,直到在readFrom上设置特殊标志,即EOF标志。寻找开头不清除任何标志,包括EOF。在搜索之前添加以下行以清除标志,您的代码应该可以正常工作。
readFrom.clear();