2014-10-02 56 views
-4

讀取字符我試圖從文件中讀取字符,我就會陷入一個死循環,這是代碼:C++ - 從ifstream的

#include "stdafx.h" 
#include <iostream> 
#include <fstream> 

using namespace std; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    ifstream ifs("ifile.txt", ios_base::in); 
    int b; 
    while ((b = ifs.get()) != EOF) 
    { 
     cout << b << endl; 
    } 
} 

請注意,我做了一個名爲IFILE文件.txt項目內部.exe文件正在創建的位置(我使用的是Microsoft Visual Studio 2013)的Debug文件夾

當我運行它時,它卡在無限循環中。 不知道爲什麼發生,但我認爲它可能必須與我創建ifile.txt的地方也許?

+1

您認爲將'b'與'ifs.eof()'做比較會怎樣? – 2014-10-02 00:09:04

+0

@DavidSchwartz打算寫EOF,而不是我的壞,但出於某種原因,b等於EOF,永遠不會打印該文件充滿字符,而不是空 – 2014-10-02 00:15:48

+0

你能告訴我們你實際上有問題的代碼嗎? – 2014-10-02 00:17:20

回答

3

請不要在eof()上循環,它幾乎總是錯的。

試試這個:

ifstream ifs("ifile.txt", ios_base::in); 

char b; 
int letters[26] = {}; 
int numbers[10] = {}; 

while(ifs.get(b))) // much better !! 
{ 
    cout << b << endl; 
} 
ifs.close(); 

在說明:

有幾個問題與使用eof()EOF只有在您嘗試閱讀您的角色後纔會觸發。我知道這不完全是你如何使用它。另一個問題是EOF在流上發生錯誤(可能是您的infimite循環?)後未被檢查?這就是爲什麼最好檢查讀取是否成功,而不是文件末尾是否已達到。

+0

爲什麼eof()幾乎總是錯的?如果我使用!= EOF怎麼辦? – 2014-10-02 00:23:17

+0

它甚至不讓我用參數 – 2014-10-02 00:27:00

+0

@ Tugal44 **閱讀文檔**而不是猜測。通過在互聯網上進行猜測和發佈,你不會在C++中獲得太多的收穫。 – 2014-10-02 00:29:25