我正在尝试创建一个单词排序程序,该程序将读取。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();