2013-02-25 77 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;