2014-10-03 68 views
0

這裏是我的功能合併代碼:C錯誤:'||'之前的預期表達式令牌

#include <stdio.h> 
    #include "merge.h" 


void merge(
    char a1[], int n1, 
    char a2[], int n2, 
    char output[]) 
{ 
    int i = 0; 
    int j = 0; 
    int z = 0; 

    while (i < n1) || (j < n2) // This is where the error happends 
    { 
     if (i < n1) && (j < n2) 
     if (a1[i] <= a2[j]) 
       output[z++] = a1[i++]; 
     else 
      output[z++] = a2[j++]; 

     else if (j == n2) 
     while (i < n1) 
       output[z++] = a1[i++]; 

    else if (i == n1) 
     while (j < n2) 
       output[z++] = a2[j++]; 
    } 
} 

你能告訴我爲什麼代碼中有這個錯誤?我已經看過所有與此相同的錯誤的問題,但它似乎沒有普遍的答案這個錯誤... 非常感謝!

+0

海,只是一個註釋:請注意括號內的變量增量:[z ++]。你應該在使用output [z]的時候知道[z ++],然後增加它,而[++ z]將首先增加<然後輸出[z],所以在最後一種情況下,z在訪問輸出之前會增加。 – 2014-10-03 08:05:04

+0

嗨Didac,我試圖將兩個數組a1和a2合併到數組輸出中。因此,每次輸出[z]得到一個值時,z都會增加,這樣輸出[z + 1]也可以得到一個值。你的意思是我應該注意的事實是,即使在我將a1和a2中的所有元素合併爲輸出後,z仍會增加?這真的很重要嗎?因爲即使z仍然增加1,這次輸出[z]將不會被賦值,因爲a1和a2中的所有元素已經被合併。謝謝! – viethaihp291 2014-10-03 21:30:40

回答

1

Englobe括號之間的全部條件:

while ((i < 3) || (j < 3)) 

您還可以使用:

while (i < 3 || j < 3) 

並精心爲:

if (i < n1) && (j < n2) 

這可能是:

if (i < n1 && j < n2) 
+0

感謝您的回答! – viethaihp291 2014-10-03 08:04:15

5
while (i < 3) || (j < 3) 

應該是:

while ((i < 3) || (j < 3)) 

或(因爲<具有比||一個更高的優先級)

while (i < 3 || j < 3) 
+0

感謝您的回答! – viethaihp291 2014-10-03 08:03:41

+0

+1「或(因爲<比||有更高的優先級)」 – 2014-10-03 08:06:09

1
while (i < 3) || (j < 3) 

應該

while ((i < 3) || (j < 3)) 

相同

if (i < n1) && (j < n2) 
+1

感謝您的答案! – viethaihp291 2014-10-03 08:05:11

相關問題