我有一些代碼循環,而逐行通過文本文件來標記數據並將其插入到一個向量中。爲eof C++避免「幻數」
我使用PEEK()來測試,如果該文件是在年底,如果是這樣打破循環:
if (fin.peek() == -1)
break;
這工作得很好,但我有點惱火夾雜物的「magic number」-1 ..是否有一個C++庫,我可以包含與stdio.h相同的函數,將-1預定義爲EOF,還是應該定義一個const int eof = -1?
我有一些代碼循環,而逐行通過文本文件來標記數據並將其插入到一個向量中。爲eof C++避免「幻數」
我使用PEEK()來測試,如果該文件是在年底,如果是這樣打破循環:
if (fin.peek() == -1)
break;
這工作得很好,但我有點惱火夾雜物的「magic number」-1 ..是否有一個C++庫,我可以包含與stdio.h相同的函數,將-1預定義爲EOF,還是應該定義一個const int eof = -1?
「神奇值」 -1被定義爲Traits::eof
,其中性狀是traits_type
的typedef您鰭變量的類型的。
換句話說,decltype(fin)::traits_type::eof
你想用std::ios::eof()
,像:
if (fin.eof())
break;
一般而言,循環控制應該做所需的輸入;如果輸入操作失敗,循環終止:
std::string word;
while (std::cin >> word)
std::cout << word << '\n';
([ifstream.peek()當它到達文件末尾的返回值]的
可能重複http://stackoverflow.com/questions/3712379/返回-ifstream-peek-when-it-end-of-the-file) – MSalters
你也許正在尋找'#include'? –
Angew
即時通訊不詢問peek()的返回值,我知道它是-1,如果它是文件的結尾..我只是問什麼是避免使用幻數-1的最佳方法..如果有一個用C++做的標準方法,就像在C中一樣,它被預定義爲EOF .. id,而不僅僅包含用於EOF的ac庫,我可以自己定義它爲const int – guskenny83