本篇说一下continue与break两个关键字
内容在书7.6章.
1.continue关键字
1.1 可用范围
while, do-while, for循环都可以使用
1.2 作用
执行到continue时,跳过本次循环的剩余部分,继续执行下一次循环.多层循环嵌套时,仅对当前层有效.
比如
for(;;) {//A
while(xxx) {//B
if(xxx) continue;//2
while(xxx) {//C
if(xxx) continue;//3
}
}
if(xxx) continue;//1
}
3只对循环C有效,同理,2只对B有效,1只对A有效.
即循环C执行了continue(3)之后继续循环C,不会影响两个外层循环循环B,循环A.
2.break关键字
2.1可用范围
while, do-while, for循环以及后面会说到的switch都可以使用
2.2作用
直接退出当前层的循环,同样仅对当前层有效.
比如
for(;;) {//A
while(xxx) {//B
if(xxx) break;//2
while(xxx) {//C
if(xxx) break;//3
}
}
if(xxx) break;//1
}
3只对循环C有效,同理,2只对B有效,1只对A有效.
即循环C执行了break(3)之后继续循环C,不会影响两个外层循环循环B,循环A.
3.代码示例
3.1 计算1-10000中所有5的倍数的和(while版)
# define STEP 5
int main(void) {
int max = 10000;
int now = 1;
int result = 0;
while(now > 0) { //为了展示break的作用就用了一个一直为true的表达式
if(++now > max) break; // 大于10000就中断循环
if(now % STEP != 0) continue; // 不是5的倍数就不执行下面的与result相加操作
result += now;
}
printf("while:1-10000中所有5的倍数的和为:%d\n", result);
return 0;
}
3.2 计算1-10000中所有5的倍数的和(do-while版)
int main(void) {
int number = 1;
int result = 0;
do {
if(++number > 10001) break;
if(number % 5 != 0) continue;
result += number;
} while(number > 0);
printf("do-while:1-10000中所有5的倍数的和为:%d\n", result);
return 0;
}
3.3 计算1-10000中所有5的倍数的和(for版)
int main(void) {
int number = 1;
int result = 0;
for(;;) {
if(++number % 5 != 0) continue;
if(number > 10000) break;
result += number;
}
printf("for:1-10000中所有5的倍数的和为%d\n", result);
return 0;
}
3.1, 3.2与3.3的执行结果:
while:1-10000中所有5的倍数的和为:10005000
do-while:1-10000中所有5的倍数的和为:10005000
for:1-10000中所有5的倍数的和为10005000