在C中嵌套的whiles

时间:2013-01-05 15:10:11

标签: c loops

int count(int *a, int *b, int n) {
    int i=0,j=0,roz=0;

    while(i<n) {
        while(j<n) {
            if(a[i]==b[j])
                roz++;
            j++;
        }
        i++;
    }
    return roz;
}

n是a或b数组的大小(两者的大小相同)。嵌套的while循环似乎只工作一次,因为i = 0.接下来似乎发生的事情是将n神奇地改为1(开头是5),这样嵌套的while不会循环第二次。为什么会这样?

有趣的是,在返回之前回显n显示正确的值,即5 ...

EDIT。 For循环在这里正常工作,但问题仍然存在。

4 个答案:

答案 0 :(得分:11)

您永远不会将j的值重置为0.

答案 1 :(得分:3)

您应该在两个嵌套循环之间将j重置为0.

while (i < n)
{
  j = 0;

  while (j < n)
  {
    if (a[i] == b[j])
      roz++;
  }
}

您可以以更有效的方式计算两个数组的交集(有一个O(N*log N)解决方案)。

答案 2 :(得分:1)

此处未更改n的值。嵌套循环未执行i = 1或更高版本的原因是您没有重置j的值。比如说,n是5.当i = 0时,嵌套循环正确执行,j的值在完成后为5。当i = 1时,j仍为5,因此它永远不会进入嵌套循环。

while(i<n)
{
    j = 0; // reset j here to solve the problem
    while(j<n) {}

答案 3 :(得分:0)

通过查看逻辑,看起来你正在计算两个阵列中常见元素的数量。

你正在做的错误是你没有在第一个while循环中将j的值重置为0。