马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
7.8 goto语句 goto语句有两部分:goto和标签名。标签的命名遵循变量命名规则,如下所示: goto part2; 要让这条语句正常工作,函数还必须包含另一条标为part2的语句,该语句以标签名后紧跟一个冒号开始: part2:printf("Refined analysis:\n"); 7.8.1 避免使用goto 处理包含多条语句的if语句: if (size > 12) goto a; goto b; a: cost = cost * 1.05; flag = 2; b: bill = cost * flag; 我们把以上模式转换成等价的C代码,标准C用复合语句或块 来处理这种情况: if (size > 12) { cost = cost * 1.05; flag = 2; } bill = cost * flag; 二选一: if (ibex > 14) goto a; sheds = 2;goto b; a: sheds= 3; b: help = 2 * sheds; C通过if else表达二选一更清楚: if (ibex > 14) sheds = 3; else sheds = 2; help = 2 * sheds; 但是,C程序员可以接受一种goto的用法——出现问题时从一组嵌套循环中跳出(一条break语句只能跳出当前循环): while (funct > 0) { for (i = 1, i <= 100; i++) { for (j = 1; j <= 50; j++) { 其他语句 if (问题) goto help; 其他语句 }其他语句 } 其他语句 } 其他语句 help: 语句 小结:程序跳转 关键字:break、continue、goto 一般注解: 这3种语句都能使程序流从程序的一处跳转至另一处。 break语句: 所有的循环和switch语句都可以使用break语句。它使程序控制跳出当前循环或switch语句的剩余部分,并继续执行跟在循环或switch后面的语句。 示例: switch (number) { case 4: printf("That's a goodchoice.\n"); break; case 5: printf("That's a fairchoice.\n"); break; default: printf("That's a poorchoice.\n"); } continue语句: 所有的循环都可以使用continue语句,但是switch语句不行。continue语句使程序控制跳出循环的剩余部分。 对于while或for循环,程序执行到continue语句后会开始进入下一轮迭代。对于do while循环,对出口条件求值后,如有必要会进入下一轮迭代。 示例: while ((ch =getchar()) != '\n') { if (ch == ' ') continue; putchar(ch); chcount++; } 以上程序段把用户输入的字符再次显示在屏幕上,并统计非空格字符。 goto语句:goto语句使程序控制跳转至相应标签语句。冒号用于分隔标签和标签语句。标签名遵循变量命名规则。标签语句可以出现在goto的前面或后面。 形式: goto label ; . . . label : statement 示例: top : ch =getchar(); . . . if (ch != 'y') goto top; |