C语言中的goto语句
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; 感觉goto语句还是挺有意思的,跟大家分享一下,不过顺便说一下,这个goto语句创建的标签,即使还没有遇到goto语句,但是先遇到了标签,那么还是会执行标签后面的语句 现在正在看重定向这一章,等看完了把笔记整理一下再发 风吹来了 发表于 2020-3-16 16:05感觉goto语句还是挺有意思的,跟大家分享一下,不过顺便说一下,这个goto语句创建的标签,即使还没有遇到go ...
会的,标签只是单纯地一个标记
但是用goto跳出去之后,goto后面的代码就不会执行了 qiuyouzhi 发表于 2020-3-16 16:07
会的,标签只是单纯地一个标记
但是用goto跳出去之后,goto后面的代码就不会执行了
谢谢补充
页:
[1]