区别:for 和 while 在实现循环的过程中都有初始化、判断、调整这三个部分,但是 for 循环的三个部 分⾮常集中,便于代码的维护,⽽如果代码较多的时候 while 循环的三个部分就⽐较分散,所以从形式上 for 循环要更优⼀些。
使用条件:使⽤在循环体⾄少被执⾏⼀次的场景下
eg:输⼊⼀个正整数,计算这个整数是⼏位数? //例如: //输⼊:1234 输出:4 //输⼊:12 输出:2
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
int cnt = 0;
do
{
cnt++;
n = n / 10;
}
while (n);
printf("%d\n", cnt);
return 0;
}
问:为什么n=0的时候还能计算出一个
答:
这是因为在这段代码中使用了 do-while 循环,循环条件是 n 的值不为 0。即使 n 的初始值为 0,循环体内的代码仍然会执行一次,然后才会检查循环条件。因此,即使 n 的初始值为 0,cnt 的值也会至少增加一次,最终输出 1。
这是因为 do-while 循环先执行循环体,然后再判断循环条件。与之相反的是 while 循环,它会先判断循环条件,然后再执行循环体。如果你希望 n 的初始值为 0 时不进行计算,可以改用 while 循环并将判断条件放在循环之前。
break:永久的终⽌循环.
#include <stdio.h>
int main()
{
int i = 1;
for(i=1; i<=10; i++)
{
if(i == 5)
break;
printf("%d ", i);
}
return 0;
}
运行结果:
continue:跳过本次循.环中 continue 后的代码,直接去到循环的调整部分。
将上面的break换成continue
#include <stdio.h>
int main()
{
int i = 1;
for(i=1; i<=10; i++)
{
if(i == 5)
continue;//这⾥continue跳过了后边的打印,来到了i++的调整部分
printf("%d ", i);
}
return 0;
}
运行结果:
对比for循环和while循环中continue对代码的运行影响:
分析代码可以知道它们修改条件的位置不同
对于while循环的修改条件在continue后面所以当i=5时,他没法继续修改,而是陷入i=5的死循环
对于for循环的修改条件在continue上面,所以当i=5时,它会跳出printf函数来到上面进行条件修改,在i=5这个基础上进行i++
do while语句中break和continue的作用跟while一样:
作用:goto 语句可以实现在同⼀个函数 内跳转到设置好的标号处。
例如:
#include <stdio.h>
int main()
{
printf("hehe\n");
goto next:
printf("haha\n");
next:
printf("跳过了haha的打印\n");
return 0;
}
在多层循环的代码中,如果想快速跳出 使⽤ goto 就⾮常快速
例如:
for(...)
{
for(...)
{
for(...)
{
if(disaster)
goto error;
}
}
}
error:
//...
本来 for 循环想提前退出得使⽤ break ,⼀个 break 只能跳出⼀层 for 循环,如果3层循环嵌套
就得使⽤3个 break 才能跳出循环,所以在这种情况下我们使⽤ goto 语句就会更加的快捷。