为什么第二个for循环不执行?

时间:2014-03-07 22:41:27

标签: c for-loop

printf调试。 while循环执行,第一个for循环执行,第二个for循环不执行。

while (size > 0){
    printf("in the while loop!\n");
    VertexPointer current = graph[0];
    int i;
    for (i = 1; i < size; i++){
        float dist = 0;
        printf("in the first for loop for i = %d \n", i);
        int j;
        for(j = 0; j++; j < dimension){
            printf("dist loop: %d\n", j);
            printf("current: %f\n", (*current).loc[0]);
            printf("unvisited: %f\n", (*graph[j]).loc[0]);

            dist = dist + pow((*current).loc[0] + (*graph[j]).loc[0], 2);
            printf("distance:  %f", dist);


            dist = sqrt(dist);
            if (dist < (*graph[i]).key){
                decreaseKey(graph, i, dist);
            }
        }

    }

    extractMin(graph, size);
    size = size - 1;
    mst_length = mst_length + (*current).key;
}

1 个答案:

答案 0 :(得分:2)

你改变了条件和增量:

for(j = 0; j++; j < dimension)

所以循环测试j++的值,并且由于postfix ++运算符返回变量的 previous 值,它将递增,它将返回0(初始值) j)的值在第一次迭代时因此永远不会循环。将其更改为

for(j = 0; j < dimension; j++)

如果打开警告,您应该收到一条消息,表明第三个表达式没有副作用(并且会被编译器优化掉)。


或者(停止:实际上不这样做):

将条件更改为++j,使其成为(可能)永无止境的循环:

for(j = 0; ++j; j < dimension)

如果你很幸运(在这种情况下通常是这样),当j到达MAX_INT并且回绕到0时,循环将结束。但是标准并不能保证那,它可能是无止境的。