为什么这个单词排序程序只循环一次?



我正在尝试创建一个单词排序程序,该程序将读取。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 filen";
                        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循环的所有下一次迭代中都会出现问题,因为没有向文件中写入进一步的单词。为什么呢?

while (readFrom >> word)
{
}
readFrom.seekg(0, ios::beg); //resets read pos to begin

while循环将继续,直到在readFrom上设置了特殊标志,即EOF标志。查找到开头不清除任何标志,包括EOF。在前添加右行来清除标志,你的代码应该可以正常工作。

readFrom.clear();

seek后,清除EOF标志

 readFrom.clear();

最新更新