C - 仅执行一次循环的缩写

时间:2010-02-15 23:35:36

标签: c for-loop

我在Mac上用ANSI C编写了命令行实用程序,其功能是为单链表创建一个气泡排序数组。我宣布了循环变量。

int a = 0;   
int b = 0;

我用缩写样式编写了循环冒泡排序(即,将变量初始化保留为空)。

for ( ; a < size; a++)  
  for( ; b < size; b++) 

这只在退出前执行一次。使用i变量填充数组的前一个for循环以相同的方式编写并按预期执行。冒泡排序循环的修复是将a = 0和b = 0重新放入。是否有原因导致缩写的for循环无法执行?

3 个答案:

答案 0 :(得分:11)

如果省略b=0,内循环将只运行一次,因为之后b已经等于大小。您需要在内循环的每次迭代中将b重置为0.

答案 1 :(得分:2)

为什么要使用你称之为for循环的缩写样式?

for循环只是下面while循环的语法糖:

for (INIT ; ENDTEST ; STEP){
    DO_SOME_STUFF
}

装置

INIT
while (ENDTEST) {
 DO_SOME_STUFF
 STEP
}

因此你的两个循环正在做:

int a = 0;
int b = 0;
while (a < size){
   while (b < size){
      DO_SOME_STUFF
      b++;
   }
   a++;
}

在这种形式中,您可以很容易地看到b的初始化没有在应该的位置完成。

我只能说避免使用缩写的for循环,删除初始化并不比删除结束测试或删除循环步骤(两者在C中都合法)都是在程序中放置错误的简单方法。 就是不要这样做。

答案 2 :(得分:1)

  

填充数组的不同for循环以相同的方式编写并按预期执行。

听起来这是在当前循环之前,并使用相同的变量ab

之后没有将它们重置为零。