2009-10-25 163 views
2

我想從文件中讀取: 該文件是多行的,基本上我需要遍歷每個「單詞」。字是非空間的東西。使用ifstream讀取文件

樣品輸入文件將是:

示例文件:

測試2D
字3.5
輸入
{

試驗13.5 12.3
另一{
測試145.4
}
}

所以,我想是這樣的:

ifstream inFile(fajl.c_str(), ifstream::in); 

if(!inFile) 
{ 
    cout << "Cannot open " << fajl << endl; 
    exit(0); 
} 

string curr_str; 
char curr_ch; 
int curr_int; 
float curr_float; 

cout << "HERE\n"; 
inFile >> curr_str; 

cout << "Read " << curr_str << endl; 

問題是,當它讀取新行它只是掛起。我在測試13.5 之前閱讀了所有內容,但一旦達到那條線,它就不會做任何事情。 任何人都可以告訴我我做錯了什麼? 有關如何做到這一點的更好建議?

我基本上需要通過文件,並在當時去一個「單詞」(非白色字符)。 我

感謝

回答

3

您打開一個文件「INFILE」但是從「給std :: cin」什麼特別的原因正在讀?

/* 
* Open the file. 
*/ 
std::ifstream inFile(fajl.c_str()); // use input file stream don't. 
             // Then you don't need explicitly specify 
             // that input flag in second parameter 
if (!inFile) // Test for error. 
{ 
    std::cerr << "Error opening file:\n"; 
    exit(1); 
} 

std::string word; 
while(inFile >> word) // while reading a word succeeds. Note >> operator with string 
{      // Will read 1 space separated word. 
    std::cout << "Word(" << word << ")\n"; 
} 
+0

錯字:) 我的意思是說INFILE >>問題本身不是編程 – grobartn 2009-10-25 00:50:30

1

不知道iostream庫的「精神」如何,但你可以使用未格式化的輸入。例如:

char tempCharacter; 
std::string currentWord; 
while (file.get(tempCharacter)) 
{ 
    if (tempCharacter == '\t' || tempCharacter == '\n' || tempCharacter == '\r' || tempCharacter == ' ') 
    { 
     std::cout << "Current Word: " << currentWord << std::endl; 
     currentWord.clear(); 
     continue; 
    } 
    currentWord.push_back(tempCharacter); 
} 

這是否行得通?

+1

因爲'的IStream :: GET'不接單'的char *'爲參數和檢查'!文件,將無法正常工作。在執行讀取之前,eof()不總是有效。此外,您正在將寬字符文字與「char」類型的窄對象進行比較(這些類型不兼容)。我會編輯它爲你修復它。 – 0x499602D2 2013-11-07 02:30:24

+0

@ 0x499602D2:謝謝修復:) – 2013-11-07 04:56:41