2016-11-24 97 views
2

考慮以下代碼:的std ::函數getline不會跳過空行

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中的代碼,輸出是正確的,但在Linux上使用g運行++時,我仍然得到一些空行。

+0

確定這些線路都是空的,並且不含有可能空格或製表符? –

+1

在if語句裏面'nextLine.empty()'應該是第一個條件。 – 0x499602D2

回答

5

輸入文件最有可能與CR LF,即在Windows/DOS文本文件的結尾行。 Linux的期望所有線與僅LF結束,所以在Linux,std::getline()結束讀取包含單個字符CR的線。

在檢查nextLine內容的現有代碼之前,檢查該行是否非空,並以CR字符結尾,然後將其刪除。然後繼續您現有的if聲明。