2012-09-17 58 views
0

我試圖比較兩個字符串數組。每當我到達if語句中的while循環時,我都會陷入無限循環,因爲即使我在循環中有一個迭代器,它也不會增加。我在迴路中有cout<< finder;只是爲了看什麼發現者在,並且它從不增加到零以上。如果有人能幫助,我會非常感激。循環中的迭代器不會增加

if (memory[p] == "J") 
    { 
     if (is_number(memory[p+1])) 
     { 
      worker = atoi(memory[p+1].c_str()); 
      p = worker; 
      continue; 
     } 
     else 
     { 
      int finder = 0; 
      while (memory[p+1] != Symtablelab[finder]) 
      { 
       cout << finder; 
       finder = finder + 1; 
      } 

      if (memory[p+1] == Symtablelab[finder]) 
      { 
       int k = Symtablepos[finder]; 
       worker = atoi(memory[k].c_str()); 

       p = worker; 
       continue; 
      } 
     } 
    } 
+1

我會將它改爲'cout <<「memory [p + 1]:」<< memory [p + 1] <<「Symtablelab [finder]:」<< Symtablelab [finder] <<「finder:」 << finder;'。這樣你可以看到循環是否被執行了多次。你需要做的是確定你的狀態是什麼,以及是否你期望的。 –

+0

@PreetSangha當我這樣做時,我得到正確的字符串值爲記憶[p + 1]和Symtablelab [0]正確的字符串值。它們並不相等。 Finder停留在零點,循環反覆運行,因爲它永遠不會增加。 – cadavid4j

+0

在你的循環中有多少次「finder」被打印出來? – Naveen

回答

2

你說finder永遠不會增加到零以上。它打印finder = 0嗎?如果是這樣,則意味着

memory[p+1] = Symtablelab[1] 

只是第一次迭代之後,因此while循環被終止,並在1

編輯 finder棍棒如果你說,它連續打印finder = 0 while語句裏面,那麼可能你在外部forwhile(循環)語句中有if (memory[p] == "J")

+0

是的,我很抱歉,我應該更加清楚。當我'cout << finder;'...它一遍又一遍地顯示,我必須^ C退出程序,因爲它處於無限循環中。它只顯示零。 – cadavid4j

1

如果它不斷打印查找程序,它是0,那麼我必須問你發佈的整個代碼片段是否包含在你沒有發佈的while語句中。如果你發佈的語句中包含的while循環不會在循環中陷入無限循環,那麼它就不會增加finder。

或者另一種可能性是Symtablelab覆蓋了'['']'操作符。如果這些都不是真的,那麼令人難以置信的東西正在發生。