4. 循环控制
循环控制 :
-- break : 退出当层循环;
-- continue : 跳过该次循环, 执行下一次循环;
-- return : 直接返回函数, 不管有多少层, 直接返回;
代码示例 :
-- Object-C 代码 :
/************************************************************************* > File Name: 11-circleControl.m > Author: octopus > Mail: octopus_truth.163.com > Created Time: 三 12/ 3 00:40:44 2014 ************************************************************************/ #import <Foundation/Foundation.h> int main(int argc, char * argv[]) { @autoreleasepool { NSLog(@"break 控制 : "); //break 会 跳出 对应的当前一级的循环, 如果是嵌套循环, 只会跳出那一层循环 for(int i = 0; i < 3; i ++) { for(int j = 0; j < 2; j++) { if(i == 1 && j == 1) { NSLog(@"i = 1, j = 1 中断本层循环, 执行 i = 2 的情况"); break; } NSLog(@"i = %d, j = %d", i, j); } } NSLog(@"\n"); NSLog(@"continue 控制 : "); for(int i = 0; i < 3; i ++) { if(i == 1) { NSLog(@"i == 1, 终止本次执行, 执行 i = 2 情况"); continue; } NSLog(@"i = %d", i); } NSLog(@"\n"); NSLog(@"return 控制 : "); for(int i = 0; i < 3; i ++) { for(int j = 0; j < 2; j ++) { if(i == 1 && j == 1) { NSLog(@"i == 1 && j == 1, 直接退出函数, 不再执行下面的语句"); return 0; } NSLog(@"i = %d, j = %d", i, j); } } } }
-- 执行结果 :
octopus-2:oc octopus$ clang -fobjc-arc -framework Foundation 11-circleControl.m octopus-2:oc octopus$ ./a.out 2014-12-03 01:06:35.669 a.out[1360:507] break 控制 : 2014-12-03 01:06:35.671 a.out[1360:507] i = 0, j = 0 2014-12-03 01:06:35.671 a.out[1360:507] i = 0, j = 1 2014-12-03 01:06:35.672 a.out[1360:507] i = 1, j = 0 2014-12-03 01:06:35.672 a.out[1360:507] i = 1, j = 1 中断本层循环, 执行 i = 2 的情况 2014-12-03 01:06:35.673 a.out[1360:507] i = 2, j = 0 2014-12-03 01:06:35.673 a.out[1360:507] i = 2, j = 1 2014-12-03 01:06:35.674 a.out[1360:507] 2014-12-03 01:06:35.674 a.out[1360:507] continue 控制 : 2014-12-03 01:06:35.675 a.out[1360:507] i = 0 2014-12-03 01:06:35.675 a.out[1360:507] i == 1, 终止本次执行, 执行 i = 2 情况 2014-12-03 01:06:35.675 a.out[1360:507] i = 2 2014-12-03 01:06:35.676 a.out[1360:507] 2014-12-03 01:06:35.676 a.out[1360:507] return 控制 : 2014-12-03 01:06:35.676 a.out[1360:507] i = 0, j = 0 2014-12-03 01:06:35.677 a.out[1360:507] i = 0, j = 1 2014-12-03 01:06:35.677 a.out[1360:507] i = 1, j = 0 2014-12-03 01:06:35.678 a.out[1360:507] i == 1 && j == 1, 直接退出函数, 不再执行下面的语句
5. goto 语句
goto 用法 :
-- 定义标签 : 在程序任意位置打上标签, 例如 "start : ";
-- 跳转标签 : 使用 "goto 标签;" 语句, 跳转到指定位置;
goto 常用场景 : 从内层循环跳到指定的外层循环, 或者直接跳出多重嵌套循环, 还要继续执行下面的语句;
代码示例 :
-- Object-C 代码 :
/************************************************************************* > File Name: 11-goto.m > Author: octopus > Mail: octopus_truth.163.com > Created Time: 三 12/ 3 01:09:55 2014 ************************************************************************/ #import <Foundation/Foundation.h> int main(int argc, char * argv[]) { @autoreleasepool { NSLog(@"goto 代替 do while 循环 : "); int k = 0; circle : NSLog(@"k = %d", k++); if(k < 3) { goto circle; } NSLog(@"\n"); NSLog(@"goto 跳出本层循环"); for(int i = 0; i < 3; i ++) { for(int j = 0; j < 2; j ++) { if(i == 1 && j == 1) { NSLog(@"此时 i == 1 && j == 1跳出到 外层循环, 执行 i = 2 的情况"); goto out; } NSLog(@"i = %d, j = %d", i, j); } out : NSLog(@"内存循环执行完毕"); } NSLog(@"\n"); NSLog(@"goto 跳出所有循环"); for(int i = 0; i < 3; i ++) { for(int j = 0; j < 2; j ++) { if(i == 1 && j == 1) { NSLog(@"此时 i == 1 & j == 1 跳出所有循环"); NSLog(@"i = %d, j = %d", i, j); } } } over : NSLog(@"所有循环执行完毕"); } }
-- 执行结果 :
octopus-2:oc octopus$ clang -fobjc-arc -framework Foundation 11-goto.m octopus-2:oc octopus$ ./a.out 2014-12-03 01:26:36.027 a.out[1475:507] goto 代替 do while 循环 : 2014-12-03 01:26:36.028 a.out[1475:507] k = 0 2014-12-03 01:26:36.029 a.out[1475:507] k = 1 2014-12-03 01:26:36.029 a.out[1475:507] k = 2 2014-12-03 01:26:36.029 a.out[1475:507] 2014-12-03 01:26:36.030 a.out[1475:507] goto 跳出本层循环 2014-12-03 01:26:36.030 a.out[1475:507] i = 0, j = 0 2014-12-03 01:26:36.031 a.out[1475:507] i = 0, j = 1 2014-12-03 01:26:36.031 a.out[1475:507] 内存循环执行完毕 2014-12-03 01:26:36.031 a.out[1475:507] i = 1, j = 0 2014-12-03 01:26:36.032 a.out[1475:507] 此时 i == 1 && j == 1跳出到 外层循环, 执行 i = 2 的情况 2014-12-03 01:26:36.032 a.out[1475:507] 内存循环执行完毕 2014-12-03 01:26:36.033 a.out[1475:507] i = 2, j = 0 2014-12-03 01:26:36.033 a.out[1475:507] i = 2, j = 1 2014-12-03 01:26:36.033 a.out[1475:507] 内存循环执行完毕 2014-12-03 01:26:36.034 a.out[1475:507] 2014-12-03 01:26:36.034 a.out[1475:507] goto 跳出所有循环 2014-12-03 01:26:36.035 a.out[1475:507] 此时 i == 1 & j == 1 跳出所有循环 2014-12-03 01:26:36.035 a.out[1475:507] i = 1, j = 1 2014-12-03 01:26:36.035 a.out[1475:507] 所有循环执行完毕