退出循环break,continue,return,goto分析
/* 在循环中间设置单个或者多个退出点,可以使用的语句有:break语句、continue语句、goto语句. return */
(1)break :break语句语句用于循环或 switch 语句中,作用立刻退出包含break的循环(break在哪一层循环,就退出哪一层)或者退出一个switch语句,同时只有当 break 出现在这些语句时,这种形式的 break 语句才是合法的。
1)break在循环体内,强行结束循环的执行,也就是结束整个循环过程,不在判断执行循环的条件是否成立,直接转向循环语句下面的语句。
2)当break出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体。
break 可用于C提供的全部三种循环结构,其作用是跳出循环。如果 break 位于循环嵌套中的一个内循环,则仅跳出该内循环。
如果一个循环的终止条件非常复杂,那么使用break语句来实现某些条件比用一个循环表达式来表达所有的条件容易得多
代码示例:
int main() {
for(int i=1; i<=10; i++) { if(i == 6) break; printf("%d,", i); } } //输出结果:12345 int main() {
for(int i=1; i<=5; i++)//2式 { if(i == 3) break; //可退出2式 for(int j=1; j<=5; j++)//1式 { //if(j == 3) break; //可退出1式 printf("%d,", j); } printf("\r\n"); } return 0; }
(2)continue :continue语句用于循环语句中,作用是不执行循环体剩余部分,直接进行下次循环。常见的就是与if连用。
代码示例:
int main() { int i; for(i=0; i<10; i++) { if(i%2 == 0) continue; //如果i为偶数 调用continue; printf("%d,", i); //输出i值 } } /* 这个程序会循环10次,i值为0到9. 当i为0,2,4,6,8时,满足i%2==0的条件,执行continue语句,直接去for(i=0; i<10; i++)里面的i++,然后进入下次循环,不会执行printf语句。 所以这个程序只会输出奇数值,即 1,3,5,7,9. */
(3)goto :被称为无条件转移语句,它通常与条件语句配合使用来改变程序流向,使得程序转去执行语句标号所标识的语句。
代码示例:
#include <stdio.h> int main() { int a=2,b=3; if(a > b) { goto aa; } printf("hello\n"); aa: printf("s\n"); printf("world\n"); //如果a>b成立,结果为 "s", "world" //如果a>b不成立,结果为 "hello", "s", "world" return 0; }
(4)return :结束正在运行的函数,并返回函数值。(return的功能为跳出循环并且跳出函数,再返回函数值。以上示例代码都带有return 0)
代码示例:
#include <stdio.h> int foo (int n) { int p = n + 2; return p; } int main (void) { printf ("p = %d\n", foo (1)); return 0; } /* 输出结果: p = 3 */