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

时间:2016-11-24 01:34:40

标签: c++

考虑以下代码:

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

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

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

1 个答案:

答案 0 :(得分:6)

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

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