我正在尝试读取文件并在每一行上获取特定字符串。我需要的字符串的结尾用分号标记。我没有遇到任何问题,但我注意到带分隔符的getline()会自动将新行附加到我的字符串。
filename.open(FileName);
while(filename)
{
getline(filename, name[counter], ';');
filename >> amount[counter] >> unit[counter] >> calories[counter];
counter++;
}
因此,当我打算打印出名称数组时,会有一个额外的换行符,我自己没有把它放在那里,好像在路上有一个额外的'\ n'被拾取。有没有人有办法解决吗?我正在阅读的文件格式示例如下。
戴夫琼斯; 24高 吉莉安琼斯; 34短 等...答案 0 :(得分:1)
运行后
filename >> amount[counter] >> unit[counter] >> calories[counter];
换行符仍在缓冲区中。当您仅使用">>&#34 ;;这通常不是问题。它只是忽略换行符。但是当你混合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');
这有点多余,但它很容易阅读。
答案 1 :(得分:1)
吞下空格的简单方法:
filename >> amount[counter] >> unit[counter] >> calories[counter] >> std::ws;
答案 2 :(得分: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
}
}