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

时间:2011-11-07 22:30:48

标签: c++ file dictionary

我正在尝试创建一个单词排序程序,它将读取.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循环的所有下一次迭代中出现问题,因为没有其他单词写入文件。那是为什么?

非常感谢你。

2 个答案:

答案 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();