2015-06-25 59 views
0

從文本文件讀取字符時我不知道爲什麼最後一個字符被讀取兩次?但是,如果我插入一條新行到它不再讀取兩次。ifstream - 讀取最後一個字符兩次

繼承人是類

class ReadFromFile { 

private: 
    std::ifstream fin; 
    std::string allMoves; 

public: 
    ReadFromFile(std::string fileName) { 

     fin.open(fileName, std::ios::in); 

     char my_character; 
     if (fin) { 
      while (!fin.eof()) { 
       fin.get(my_character); 
       allMoves += my_character; 
      } 

     } else { 
      std::cout << "file does not exist!\n"; 
     } 

     std::cout << allMoves << std::endl; 
    } 
}; 

和繼承人的文本文件的內容(不換行)

1,2 3,1 1,3 1,2 1,4 

和輸出:

1,2 3,1 1,3 1,2 1,44 
+2

可能重複[爲什麼的iostream :: EOF內一個循環條件考慮錯誤?](http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) –

回答

2

您需要檢查鰭之後fin.get。如果調用失敗(因爲它發生在最後一個字符),你繼續下去,儘管流過度(和my_character無效)

喜歡的東西:

fin.get(my_character); 
if (!fin) 
    break ; 
+0

好吧 - 你的意思是我應該打電話fin.fail ()在fin.get()之後的if語句中,然後在那裏放置一個break? – java

+0

@java:更新了代碼 – marom

+0

謝謝 - fin.fail()也適用:-) – java