0
我有一個數據文件字符串和整數讀取,它有這樣的事情閱讀在同一行
約1 2 3 4
我想讀這些數據和執行某些功能,只是想確保我做對了。
while(myIn.peek()!=EOF)
{
getline(myIn, name, '/n');
myIn>>a>>b>>c>>d;
}
我有一個數據文件字符串和整數讀取,它有這樣的事情閱讀在同一行
約1 2 3 4
我想讀這些數據和執行某些功能,只是想確保我做對了。
while(myIn.peek()!=EOF)
{
getline(myIn, name, '/n');
myIn>>a>>b>>c>>d;
}
如果下一個字符不是文件結尾,但是提取失敗,那麼您的代碼會搞砸。這通常發生在文件的末尾,在文件結尾處還有一個額外的\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
}
}
現在,即使是格式錯誤的線路,你」我仍然會繼續下一行,而不是一起放棄。
好吧,數據文件有多行結構相同,我想讀一行,執行一些函數,然後繼續下一行。謝謝你的幫助! – 2013-03-25 20:02:59
@JasonLee那麼也許你會更喜歡第二種選擇。當我逐行處理時,我喜歡它。 – 2013-03-25 20:19:17