2013-03-25 61 views
0

我有一個數據文件字符串和整數讀取,它有這樣的事情閱讀在同一行

約1 2 3 4

我想讀這些數據和執行某些功能,只是想確保我做對了。

while(myIn.peek()!=EOF) 
{ 
getline(myIn, name, '/n'); 
myIn>>a>>b>>c>>d; 
} 

回答

1

如果下一個字符不是文件結尾,但是提取失敗,那麼您的代碼會搞砸。這通常發生在文件的末尾,在文件結尾處還有一個額外的\n

您在致電getline時也有問題。 /n是一個多字節字符。推測你的意思是\n,但即使如此,行中的「john」後面也沒有\n。相反,只需使用myIn >> name即可。

無論如何,使用您的提取作爲while的條件更爲習慣。試試這個:

while (myIn >> name >> a >> b >> c >> d) { 
    // Do something with them 
} 

while循環體如果有任何提取的失敗根本不會執行。這意味着你可以在造成更多傷害之前迅速離開。但是,這裏我們並不關心每組值是否在單獨的行中。它會愉快地接受:

john 1 2 3 4 mary 5 6 7 8 

另一種方法是用std::getline首先讀取整個行,然後你可以解析線:

std::string line; 
while (std::getline(myIn, line)) { 
    std::stringstream line_stream(line); 
    if (line_stream >> name >> a >> b >> c >> d) { 
    // Do something with this line 
    } 
} 

現在,即使是格式錯誤的線路,你」我仍然會繼續下一行,而不是一起放棄。

+0

好吧,數據文件有多行結構相同,我想讀一行,執行一些函數,然後繼續下一行。謝謝你的幫助! – 2013-03-25 20:02:59

+0

@JasonLee那麼也許你會更喜歡第二種選擇。當我逐行處理時,我喜歡它。 – 2013-03-25 20:19:17