2013-02-06 117 views
0

我有一個讀取文件的程序。我所有的課程編譯都很好,但是當我讀入文件時似乎有錯誤。 Eclipse顯示一個正在被讀入(「」)的空字符串,這不是我想要的。文件沒有正確讀取

我有一個while循環我的主要代碼。我只是爲了看看它在調試時如何運行而放置了循環,並且它運行了一個無限循環,因爲它總是在「」中讀取,並且永遠不會到達文件結尾。我已經將文件放在工作目錄和其他文件夾中,但是它始終在執行此操作,即使文件充滿字符串和整數。有什麼我在這裏做錯了嗎?

#include "Translator.h" 
#include <iostream> 
#include <fstream> 
#include <cstdlib> 
#include <string> 

using namespace std; 

int main(int argc, char* argv[]) 
{ 
    ifstream readFile; 
    readFile.open("sample.html"); 

    while (!readFile.eof()) // for debugging purposes only 
    { 
    string x; 

    readFile >> x; // x is "" everytime through the loop 
    readFile >> x; // x is also "" 
    } 
    Translator t(readFile); 

    readFile.close(); 
    return 0; 
} 
+1

Try:'string x; while(readFile >> x);' – WhozCraig

+0

標題說C,代碼是C++,標籤是C++。怎麼辦。 – 2013-02-06 22:11:08

+2

@ H2CO3 Java或Smalltalk。您選擇= P – WhozCraig

回答

0

我的猜測是你的文件沒有打開,因此eof位沒有設置。你永遠不會測試文件是否成功打開。這可能是因爲你的工作目錄不是你想象的那樣,或者文件被另一個進程鎖定(可能在文本編輯器中打開)。

正式地,您可以在嘗試打開後測試readFile.fail()

我發現檢查readFile.good()也很好 - 事實上,你可以使用它作爲你的循環條件。

我更喜歡我的代碼中的'好'的積極信息,而不是潛在的失敗'失敗'。

當您正在閱讀數據時,您還應該將您的信息流測試爲WhozCraig在評論中建議的內容。你不能認爲操作是成功的。如果由於EOF以外的原因而失敗,則需要知道。

由於這些原因,請勿使用readFile.eof()作爲循環條件。

+0

@ brent-mitchel我混合壞了,你應該測試失敗(),而不是壞() –

+0

謝謝,與好()我能弄清楚它應該在什麼目錄,我想它是工作現在即使我沒有更改我的代碼......我也重新啓動了Eclipse,所以我不知道它在做什麼,但謝謝。 –