2013-01-10 162 views
0

我有一個代碼如下。每當temps = $Nodes循環應該結束。我在每次迭代中檢查了temps,並且看到temps = $Nodes一次,但循環未結束。此代碼適用於VS10,但不適用於Linux。任何想法?比較字符串不起作用

std::string temps; 
s_mesh_file.open (mesh_file.c_str()); 

do 
{ 
    getline (s_mesh_file, temps); 
    std::cout << "temps: " << temps << std::endl; 
    std::cin.ignore(); 
} 
while (temps != "$Nodes"); 
+3

也許'temps'在結尾處包含一些尾部空白?所以你在窗口上看到「'Nodes'」,但它實際上是「'Nodes'」? –

+4

他們是否使用相同的確切輸入文件?包括Windows換行符? Linux不喜歡windows換行符。 (也不喜歡Linux的Windows)@AndyProwl它可能是'「$ Nodes \ r」' –

+3

我想這是你的答案:http://stackoverflow.com/a/8960119/112968 – knittl

回答

0

刪除std::cin.ignore();。您正在等待用戶輸入。在linux上測試。

+1

你一定錯過了評論。直到不久之前,我才注意到這是'cin',所以我很困惑爲什麼OP得到正確的文本。我堅信OP在每次迭代時都按下輸入。 – chris

1

它們是否使用相同的確切輸入文件?包括Windows換行符? Linux不喜歡windows換行符。 (Windows也不像Linux)

在windows中,每個換行符是\r後跟\n。在Linux中,換行符是只是\n。流默認在「文本模式」下打開,該模式將系統換行符轉換爲\n。所以,當你在Windows中讀取文件時,它會有幫助地刪除\r。然而,Linux沒有意識到它是換行符的一部分,因此將\r放到字符串的末尾就像其他常規字符一樣,這​​使得它與硬編碼的"$Nodes"不匹配。