[英]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.