簡體   English   中英

從ifstream讀取時,std :: getline不會跳過空行

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

考慮以下代碼:

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語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM