2012-11-12 53 views
1

在C++ Ubunt 12.04中,我有一個名爲config.txt的文件,其中包含user namepassword。我有2 public static string變量:USERPASSWORD。這是我的代碼:我的cout有什麼問題?

// Read file from config 
string text[2]; 
int count = 0; 
while(!fin.eof()){ 
    getline(fin,text[count]); 
    count++; 
    if(count == 2){ 
     break; 
    } 
} 
CONNECTOR::USER = text[0]; 
CONNECTOR::PASSWORD = text[1]; 

string userAndPassword = CONNECTOR::USER + ":" + CONNECTOR::PASSWORD; 
cout << CONNECTOR::USER << endl; // It's fine, right user: qsleader 
cout << CONNECTOR::PASSWORD << endl; // ok, right password: 123456 
cout <<"user and password: " << userAndPassword << endl; // It's weird text! Problem here! 

奇怪的文本結果是::123456d password: qsleader !!這不是我所期望的!但我不知道爲什麼會發生這種情況?任何人都可以給我一個建議嗎? (如果我打印:cout << "user and password: qsleader:123456",結果是好的!!)!

+0

Sr,我的複製錯誤! –

+3

你確定這只是一個複製錯誤嗎? – irrelephant

+0

看看[這個問題](http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong)。 – juanchopanza

回答

2

問題是在您讀取值時創建的。事實上,我猜你的文件在兩條不同的線上有兩個項目。此外,我猜這個文件使用Windows行尾。因此,當您讀取第一個項目時,它會讀取qsleader\r,然後停止提取下一個字符爲\n,解壓縮但不附加到字符串。

當您創建userAndPassword字符串時,它實際上是qsleader\r:123456。這個特殊字符\r是一個回車。它使光標移動到行的開頭。因此,在最後一行,您首先輸出user and password: qsleader,然後返回到第一列,並寫入:123456,結果爲:123456d password: qsleader

+0

優秀的答案...沒有想過windows line endings – Chris

+0

@Chris文件名是'config.txt'。擴展是線索 –

+0

好的工作!我怎麼表達我對你的感謝!!謝謝你非常多!我把我的工作從'windows'移植到'Ubuntu',這個問題! –

0

您正在將userAndPassword設置爲一個涉及分配的地獄表情。我猜你的意圖是:

string userAndPassword = CONNECTOR::USER + ":" + CONNECTOR::PASSWORD 
+0

是的,我的類型錯誤是sr ! –