2013-10-16 62 views
2

我有一些代碼循環,而逐行通過文本文件來標記數據並將其插入到一個向量中。爲eof C++避免「幻數」

我使用PEEK()來測試,如果該文件是在年底,如果是這樣打破循環:

if (fin.peek() == -1) 
    break; 

這工作得很好,但我有點惱火夾雜物的「magic number」-1 ..是否有一個C++庫,我可以包含與stdio.h相同的函數,將-1預定義爲EOF,還是應該定義一個const int eof = -1?

+0

可能重複http://stackoverflow.com/questions/3712379/返回-ifstream-peek-when-it-end-of-the-file) – MSalters

+0

你也許正在尋找'#include '? – Angew

+0

即時通訊不詢問peek()的返回值,我知道它是-1,如果它是文件的結尾..我只是問什麼是避免使用幻數-1的最佳方法..如果有一個用C++做的標準方法,就像在C中一樣,它被預定義爲EOF .. id,而不僅僅包含用於EOF的ac庫,我可以自己定義它爲const int – guskenny83

回答

3

「神奇值」 -1被定義爲Traits::eof,其中性狀是traits_type的typedef您變量的類型的。

換句話說,decltype(fin)::traits_type::eof

1

你想用std::ios::eof(),像:

if (fin.eof()) 

    break; 
1

一般而言,循環控制應該做所需的輸入;如果輸入操作失敗,循環終止:

std::string word; 
while (std::cin >> word) 
    std::cout << word << '\n'; 
([ifstream.peek()當它到達文件末尾的返回值]的