for循环中的break和continue
和在while循环中类似,但是还是有部分差异的,我们来看看下面两段代码:
//代码1 #include <stdio.h> int main() { int i = 0; for (i = 1; i <= 10; i++) { if (i == 5) break; printf("%d ", i); } return 0; } //代码2 #include <stdio.h> int main() { int i = 0; for (i = 1; i <= 10; i++) { if (i == 5) continue; printf("%d ", i); } return 0; }
与whlie中代码类似,但是运行结果却不尽相同:
代码1是相同的这里不做讨论,代码2的运行结果却有较大差异。
原因:
在for循环中,我们可以看到,即使continue跳过了i==5这次循环,但由于i是在for语句中表达式3上就已经++了,所以跳过5也不会对后面的运行有什么影响,只需省略对5的打印即可。
for语句的循环控制变量
建议:
1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。
2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
int i = 0; //前闭后开的写法 for(i=0; i<10; i++) {} //两边都是闭区间 for(i=0; i<=9; i++) {}
这两种写法都是对的,但是对于初学者来很容易误判循环需要执行的次数,此时采用前闭后开区间的写法就能很好的判断出循环的次数。
也就是说,此时循环的次数就等于你后开(i<10)中的那个数,对上面代码来说就是10次!
for循环中的一些变体
1.可省略
//代码1 for(;;) { printf("hehe\n"); }
for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问题
2.可嵌套
//代码2 int i = 0; int j = 0; //这里打印多少个hehe? for(i=0; i<10; i++) { for(j=0; j<10; j++) { printf("hehe\n"); }
此时打印的hehe数应该为10*10个
3.可使用多个变量控制循环
//代码4-使用多余一个变量控制循环 int x, y; for (x = 0, y = 0; x<2 && y<5; ++x, y++) { printf("hehe\n"); }
3.do-while循环
与while循环类似,但是它是先执行一次,再判断循环条件。
语法
do
循环语句;
while(表达式);
执行流程
stmt表示需要执行的语句,expr表示判断循环的条件。
do-while语句的特点
循环至少执行一次,使用的场景有限,所以不是经常使用。
#include <stdio.h> int main() { int i = 1; do { printf("%d ", i); i=i+1; }while(i<=10); return 0; }
do-while语句中的break与continue
#include <stdio.h> int main() { int i = 1; do { if(5 == i) break; printf("%d ", i); i=i+1; }while(i<=10); return 0; } #include <stdio.h> int main() { int i = 1; do { if(5 == i) continue; printf("%d ", i); i=i+1; }while(i<=10); return 0; }
实际使用下来与while类似,我就不具体展开了。
4.goto语句
C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。
从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。
但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。
例如:一次跳出两层或多层循环。
多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。
goto语言真正适合的场景如下:
for(...) for(...) { for(...) { if(disaster) goto error; } } … error: if(disaster) // 处理错误情况
这样就能直接跳出多层循环直接来到error了
整蛊游戏-关机程序
下面我们来讲一个goto实战的小例子–关机程序
注意:这里博主用切身经历告诉大家,如果不想遭到毒打,就不要整蛊室友!!切记切记!!尤其是在ta打游戏的时候。
代码如下:
#include<stdlib.h> #include<windows.h> int main() { char i[10] = { 0 }; system("shutdown -s -t 60");//系统指令让电脑关机 again: printf("你的电脑将在一分钟后关机,请输入“我是猪”停止关机\n请输入:>"); scanf("%s", &i); if ((strcmp(i, "我是猪") != 0))//判断是否输入“我是猪” goto again; else system("shutdown -a");//停止关机 return 0; }
当然,while也可以实现:
#include <stdio.h> #include <stdlib.h> int main() { char input[10] = { 0 }; system("shutdown -s -t 60"); while (1) { printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>"); scanf("%s", input); if (0 == strcmp(input, "我是猪")) { system("shutdown -a"); break; } return 0; } }
这种算是比较好心的了,你如果想恶搞的话完全可以错误的提示ta,ta永远都猜不对。甚至能把这个程序安装在系统里只要电脑一启动就运行该程序。
当然这里博主墙裂不推荐大家这么做,博主上回这么做已经是18年前了,现在17岁了。
关于上面的系统指令啥的,只需要了解即可,后面有机会会讲的,对于初学者来说,上面都想学就只会从入门到入土
二.循环语句的实战应用
鉴于篇幅原因以及以前都写过相关博客,这里就不多赘述了,咱们直接贴博客链接,感兴趣的可以来看看:
【C语言】三子棋详解(包教包会的那种)
【C语言】万字教学,带你分步实现扫雷游戏(内含递归函数解析),剑指扫雷,一篇足矣
【C语言】带你玩转经典算法用二分法在一个有序数组中查找某个数
【C语言】如何打印某个范围中满足某些条件的数(素数,闰年,水仙花数等)
总结
今天的内容就到此结束啦,循环中我见过以及遇到过的所有知识以及易错点都在里面。
如果你有任何疑问欢迎在评论区指出或者私信我,咱们下次再见啦!
新人创作不易,如果今天的内容对你有所帮助的话,请点个三连再走吧,你们的支持就是我更新的动力,再次感谢大家的支持!!!