为什么这是循环跳过第一次迭代?

时间:2015-03-07 16:26:19

标签: c loops for-loop

for循环的第二次迭代总是跳过第一次迭代。在调试模式下,它以i=1开头,但只要它计​​算if子句i=2,其余部分就会很好。它几乎就像是隐藏continue

原始代码:

int n, k, i, j = 0;
int *key;
int x = 0;
int y = 0;

scanf ("%d%d", &n, &k);
key = malloc (n * sizeof (int));

for (i = 0; i < n; i++) {
    scanf("%d", &key[i]);
}


    for (i = 1; i <= n; i++) {
        if (key[j % n] == i) {
            x++;
        } else {
            y++;
            j++;
        }           
    }

这种方式的代码完美无缺:

 while (1) {
    for (i = 1; i <= n; i++) {
        while (1) {
            if (x == k) {
                printf("%d",y);
                return 0;
            } else if (!(key[j % n] - i)) {
                x++;    
                break;
            } else {
                y++;
                j++;
            }
        }
    }
}

0 个答案:

没有答案