第三章 控制流 >> 3.7 break语句与continue语句
1. break:跳出循环语句 或 switch语句
如同从switch语句中提前退出一样,break语句也可以从for、while、do-while循环中立即跳出。
要注意的是,一个break语句只能从最内层的循环中跳出。也就是说,对于嵌套的循环语句或switch语句,break也只是仅仅从该语句所在的循环中跳出来,仍会处于上一级的循环控制下。
以trim函数为例,该函数用于删除字符串尾部的空格符、制表符和换行符,如果最右边的字符不是这些字符,则使用break退出循环。
#include <stdio.h> #include <string.h> /* trim: remove trailing blanks, tabs, newlines */ int trim(char s[]) { int n; for (n = strlen(s)-1; n >= 0; n--) if (s[n]!= ' ' && s[n]!= '\t' && s[n]!= '\n') break; s[n+1] = '\0'; return n; } int main() { char str[] = {'1', '2', '3', ' ', '\t', '\n'}; int len = 0; printf("before: %s#END\n", str); len = trim(str); printf("after: Len = %d\n", len); printf("after: %s#END\n", str); return 0; }
2. continue:执行下一次循环
用于使for、while、do-while语句开始下一次循环的执行。
在while与do-while语句中,continue语句的执行意味着立即执行条件测试部分;而在for循环中,则意味着立即执行递增循环变量部分。
而且continue只适用于循环语句,不适用于switch语句。当然你仍可以在switch语句中使用continue语句,不会这个continue是用于控制switch语句上一层的循环语句(for、while或do-while)。
也来看一个continue语句的例子,下面这段程序用于处理数组a中的非负元素:
for (i = 0; i < n; i++) { if (a[i]< 0) /* skip negative elements */ continue; ... /* handle positive elements */ }
如果某个元素为负值,则跳过(不作处理)。