c++ - 如果不存在,为什么 getline 返回空行

标签 c++ string io

我有一个包含以下行的文件:

5556
0   bla.dxf
1   blub.dxf
2   buzz.dxf

数字和文本各用一个制表符分隔,5556后没有空格字符。下面的代码用于解析。

int main(int, char**){
  std::ifstream file("test.bld");
  std::string buildingName;
  file >> buildingName;
  std::cout << buildingName << std::endl;
  std::string buf;
  while(getline(file, buf)) {
    if(buf.empty()){std::cout << "String was empty"<<std::endl;}
    else std::cout << buf << std::endl;
  }
  return 0;
}

当我解析文件时,我得到一个空行,尽管显然没有。 输出内容如下:

5556
String was empty
0   bla.dxf
1   blub.dxf
2   buzz.dxf

这只是一个最小的例子。整个文件和解析器更复杂,我非常想对第一个元素使用直接解析,对其余元素使用 getline。我对使用 getline 进行行解析有何误解?如何避免出现空行?

最佳答案

operator>>(istream, string) 读取 up to but not including提取的标记后的第一个空白字符。

要在提取 token 后跳过该行的其余部分,您可以使用

std::cin >> std::ws;

(如果你知道只剩下一个换行符),或者

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

无论如何都跳到行尾。

关于c++ - 如果不存在,为什么 getline 返回空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11395521/

相关文章:

java - 将所有出现的字符串替换为java中的特殊字符

c++ - 在 C++ 中读取每行 2 个数字

java - 快速读取文本文件的最后一行?

c++ - 为什么使用 C++ 容器 "array"而不是传统的 C 数组?

C++ stringstream 转换为 double with operator>>

c++ - 链接列表、结构和类

c++ - 为什么 weak_ptr 没有 atomic_{store,load}?

string - 字典排序 O(m)

c++ - 从文件中读取字符串并将其不同部分保存在 C++ 中的不同变量中

c++ - 从stdio获取一行以空格分隔的整数,而无需知道它们的多少(C++)