c++ - getline() 分隔符问题

标签 c++ string file delimiter getline

我正在尝试读取文件并获取每一行的特定字符串。我需要的字符串末尾用分号标记。我这样做没有问题,但我注意到带有分隔符的 getline() 会自动将新行附加到我的字符串中。

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

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

  }

所以当我去打印名称数组时,会有 1 个额外的换行符,我自己没有把它放在那里,就好像一路上有一个额外的 '\n' 被拾取一样。有没有人有办法解决吗?下面是我正在读取的文件格式的示例。

戴夫·琼斯; 24 高
吉莉安·琼斯; 34 短 等等...

最佳答案

运行后

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'); 

这有点多余,但很容易阅读。

关于c++ - getline() 分隔符问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15060480/

相关文章:

java - 是什么让引用比较 (==) 对 Java 中的某些字符串起作用?

javascript - 当输入 ="file"时,如何获得预选输入?

c++ - 在新范围内使用 unique_lock 是否等同于在共享资源工作结束时解锁调用?

c++ - 为使用Little或Big字节序的计算机编写程序。并且有相同的结果

c++ - OpenACC - 嵌套循环奇怪的行为

c++ - std::copy 将 double 组复制到 float 组?

java - 在java中使用正则表达式分割字符串时转义符号

java - 拆分字符串并将其放在 int 数组中

javascript - 隐藏文件扩展名时识别文件类型

c# - 如果我在 Codebehind 中创建一个文件,物理文件实际存在于何处?