我在Mac上用ANSI C编写了命令行实用程序,其功能是为单链表创建一个气泡排序数组。我宣布了循环变量。
int a = 0;
int b = 0;
我用缩写样式编写了循环冒泡排序(即,将变量初始化保留为空)。
for ( ; a < size; a++)
for( ; b < size; b++)
这只在退出前执行一次。使用i变量填充数组的前一个for循环以相同的方式编写并按预期执行。冒泡排序循环的修复是将a = 0和b = 0重新放入。是否有原因导致缩写的for循环无法执行?
答案 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循环以相同的方式编写并按预期执行。
听起来这是在当前循环之前,并使用相同的变量a
和b
。
之后没有将它们重置为零。