std::getline 在从 ifstream 读取时不会跳过空行

std::getline doesn't skip empty lines when reading from ifstream

本文关键字:getline 在从 ifstream 读取 std      更新时间:2023-10-16

考虑此代码:

vector<string> parse(char* _config) {
  ifstream my_file(_config);
  vector<string> my_lines;
  string nextLine;
  while (std::getline(my_file, nextLine)) {
      if (nextLine[0] == '#' || nextLine.empty() || nextLine == "") continue;
      my_lines.push_back(nextLine);
  }
return my_lines;
}

和此配置文件:

#Verbal OFF
0
#Highest numeric value
100
#Deck
67D 44D 54D 63D AS 69H 100D 41H 100C 39H 10H 85H 7D 42S 6C 67H 61D 33D 28H 93S QH 5D 91C 40S 50C 74S 8C 98C 96C 71D 82S 75S 23D 40C 29S QC 84C 16C 80D 13H 35S
#Players
P1 1
P2 2

我的目标是将配置文件解析为字符串的向量,逐行解析,忽略空行和"#"字符。

在Visual Studio上运行此代码时,输出是正确的,但是,在使用G 的Linux上运行时,我仍然会得到一些空行。

您的输入文件很可能具有CR LF结尾的行,即Windows/DOS文本文件。Linux期望仅以LF结尾的所有行,因此在Linux上,std::getline()最终读取包含一个CR字符的行。

在检查nextLine内容的现有代码之前,检查行是否是非空的,并以CR字符结束,然后将其删除。然后继续使用您现有的if语句。