2014-10-03 121 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