Почему эта программа сортировки слов повторяется только один раз? - PullRequest
1 голос
/ 08 ноября 2011

Я пытаюсь создать программу сортировки слов, которая будет читать слова в текстовом файле, а затем записывать их в новый файл в порядке от самых коротких слов до самых длинных слов.Так, например, если первый файл содержит:

слон

собака

мышь

После выполнения программы я хочу второй файл (который изначально пуст), чтобы содержать:

собака

мышь

слон

Вот код:

#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 ]

1 голос
/ 08 ноября 2011
while (readFrom >> word)
{

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

Цикл while будет продолжаться до тех пор, пока в readFrom не будут установлены специальные флаги, а именно флаг EOF. Стремление к началу не сбрасывает все флаги, включая EOF. Добавьте следующую строку справа перед , чтобы очистить флаги, и ваш код должен работать нормально.

readFrom.clear();
1 голос
/ 08 ноября 2011

После поиска снимите флаг EOF.

 readFrom.clear();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...