2014-12-01 162 views
-1
if(inputFile.is_open()){ 
     while(!inputFile.eof()){ 
      getline(inputFile, line); 
      ss << line; 
       while(ss){ 
       ss >> key; 
       cout << key << " "; 
       lineSet.insert(lineNumber); 
       concordance[key] = lineSet; 
      } 
      lineNumber++; 
     } 
    } 

出於某種原因,while循環在第一次迭代後踢出並僅顯示我的輸入文件的第一句。其餘的代碼工作正常,我只是不知道爲什麼它認爲文件已經在第一次迭代後結束。無法輸出我的整個文件

感謝

+2

而{ – 2014-12-01 23:10:07

+0

我很抱歉,我不得不分享這個,但是閱讀障礙設置和我看這是「黑話輸出我的整個生活「,真的很好奇爲什麼有人會想這樣做:) – Uxonith 2014-12-01 23:14:00

+0

重新打開:雖然'eof'的使用是錯誤的,這不是主要問題 – 2014-12-01 23:21:38

回答

0

首先,你應該去閱讀文件,而無需使用eof,作爲πάνταῥεῖ說明(見here進行說明):

while(getline(inputFile, line)) 
{ 
    // process the line 
} 

注意前面的if是沒有必要的要麼。

的主要問題,假設ss是以前定義的stringstream,來自邏輯:

ss << line; 
while(ss){ 
    // stuff 
} 

這裏while循環,只有當ss失敗退出。但你永遠不會重置ss處於良好的狀態。因此,雖然外層循環讀取文件的每一行,但第一行之後的所有行都不會生成任何輸出。

相反,你需要reset the stringstream每次:(!inputFile.eof())

ss.clear(); 
ss.str(line); 
while (ss) { 
    // stuff 
}