2014-02-15 54 views
0

比較當我運行Windows機器上的代碼,它打印緩衝區。但是當涉及到Mac OS時,它不會從getline打印緩衝區。我不知道爲什麼會發生。 Mac OS的使用GCC 4.2.1,Windows使用MinGW的4.8.1。C++字符串在Windows和Mac OS

#include <iostream> 
#include <fstream> 
using namespace std; 

int main() { 
const char *filename = "inputfile.txt"; 
string buffer; 
ifstream infile(filename); 

while(infile.good()) 
{ 
    getline(infile,buffer); 
    if(buffer == "[Modal]") 
     cout << "[Modal] Found!" << endl; 
} 

return 0; 
} 

回答

1

如果您創建Windows上的文件,然後將其轉移到Mac OS,這將有Windows行尾。

的Windows是有點奇怪 - 在Windows創建的文本文件,行 「\ r \ n」 結尾。在閱讀文件時,通常這會轉換回「\ n」。 Mac OS不會執行此翻譯,因此緩衝區實際上將包含「[Modal] \ r」。

dos2unix是一個命令行程序,可以爲你做翻譯,如果這就是你想要做的。

0

我認爲問題是在Mac OS中找不到該文件。

更改這些語句

while(infile.good()) 
{ 
    getline(infile,buffer); 
    if(buffer == "[Modal]") 
     cout << buffer << endl; 
} 

if (infile) 
{ 
    while(getline(infile,buffer)) 
    { 
     if(buffer == "[Modal]") 
     cout << buffer << endl; 
    } 
} 
else 
{ 
    cout << "File open error" << endl; 
} 
+0

我不這麼認爲。當我駁回「如果(緩衝==‘[模態])’,但它打印緩衝器良好。 – edmundpie