2011-11-07 97 views
1

我試圖創建一個單詞排序程序,它將讀取.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

你試過在調試器中運行這個嗎? –

+0

while(readfrom >> word)loop你將位置重置爲0,所以它從頭再次開始 – fazo

+0

這也不適合單詞,它實際上是一個基於字母數量的穩定排序。相同長度的單詞將保留其原始相對位置,導致未分類的結果。 –

回答

1
while (readFrom >> word) 
{ 

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

while循環會一直持續到特殊標誌上readFrom,即EOF標誌設置。 不是清除任何標誌,包括EOF。在之前添加以下行尋求清除標誌和您的代碼應該正常工作。

readFrom.clear(); 
+0

這固定在一個小小的!非常感謝! – JamesGold

1

查找後,清除EOF標誌。

readFrom.clear(); 
相關問題