2013-07-10 25 views
0

我有以下文件:奇怪的函數getline行爲在C++中

BB 
7.501106 5.324115 
7.997006 8.287983 
11.314904 11.768281 
... 

,我100%肯定該文件是好的,我甚至顯示在vim換行符與:set list

BB$ 
7.501106 5.324115$ 
7.997006 8.287983$ 
11.314904 11.768281$ 
... 

但是當我打開並閱讀第一行時會發生一些奇怪的事情。我有以下代碼:

std::ifstream file(filename); 
std::string line; 
if (!file.is_open()) { 
    std::cerr << "parseConfig: Error opening config file: " << filename << std::endl; 
    exit(1); 
} 

getline(file, line); 
std::cout << "line is: <" << line << ">" << std::endl; 
if (line.compare("BB")) { 
    std::cerr << "parseConfig: Error in config file, first line is not BB" << std::endl; 
    exit(1); 
} 

現在我知道該文件正在打開正確,因爲我們一直到最後的錯誤。

打印出來是如下:

>ine is: <BB //What!!!?? Why did this happen? 
parseConfig: Error in config file, first line is not BB 

這令我奇怪,它彷彿有在文本文件中的回車。但我確信沒有。

任何想法?

回答

3

它看起來像文件是在DOS模式下。檢查vim底部是否顯示[dos],或檢查file yourfile.txt

另一種檢查方法是通過管道文件或通過cat -A(或cat -v,如果您的貓沒有-A)程序的輸出。回車將顯示爲^M

要轉換爲UNIX格式,請在vim中執行:set ff=unix,然後保存該文件。如果有的話,或者使用dos2unix命令行工具。

+0

是的。我如何將其轉換爲正確的格式? –

+0

@Ben:'dos2unix BB' –