2013-02-25 125 views
1

我想讀通過一個文件,並獲得每一行上的特定字符串。我需要的字符串的末尾用分號標記。這樣做我沒有問題,但我注意到帶分隔符的getline()會自動將一個新行添加到我的字符串中。問題與getline()分隔符

filename.open(FileName); 
while(filename) 
    { 
    getline(filename, name[counter], ';'); 

    filename >> amount[counter] >> unit[counter] >> calories[counter]; 
    counter++; 

    } 

所以,當我會去打印出了名陣列會有1個額外換行符是好像有一個額外的「\ n」被沿途拾起我還沒有把自己的存在。有沒有人有辦法解決嗎?下面是我正在閱讀的文件格式示例。

Dave Jones; 24身高
Jillian Jones; 34短 等等

+0

告訴你似乎並不匹配'>>量[計數器] >>單元[計數器] >>卡路里[計數器]'的文件格式。另外,當'counter ++'超出數組大小時會發生什麼? – Johnsyweb 2013-02-25 05:20:31

回答

1

運行

filename >> amount[counter] >> unit[counter] >> calories[counter]; 

的後換行符仍然在緩衝區中。當您僅使用「>>」時,這通常不是問題;它只是忽略換行符。但是,當您將getline和「>>」混合使用時,您需要忽略「>>」留下的換行符。試試這樣的:

filename >> amount[counter] >> unit[counter] >> calories[counter]; 
// Ignore first character or everything up to the next newline, 
// whichever comes first 
filename.ignore(1, '\n'); 

這有點多餘,但它很容易閱讀。

0

更好的辦法是逐行讀取文件中的行到緩衝區,並通過再拆字符串「;」:

while(true) { 
    std::string line; 
    std::getline(in, line); 
    if(!in) break; 
    std::istringstream iline(line); 
    while(true) { 
     std::string str; 
     std::getline(iline, str, ';'); 
     if(!iline) break; 
     // you get string by string in str here 
    } 
} 
1

更簡單的方法吞下空白:

filename >> amount[counter] >> unit[counter] >> calories[counter] >> std::ws;