鱼C论坛

 找回密码
 立即注册
查看: 1228|回复: 4

[技术交流] C语言中的goto语句

[复制链接]
发表于 2020-3-16 16:03:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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: 语句
小结:程序跳转
关键字:breakcontinuegoto
一般注解:
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语句使程序控制跳出循环的剩余部分。
对于whilefor循环,程序执行到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;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-16 16:05:09 | 显示全部楼层
感觉goto语句还是挺有意思的,跟大家分享一下,不过顺便说一下,这个goto语句创建的标签,即使还没有遇到goto语句,但是先遇到了标签,那么还是会执行标签后面的语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-16 16:05:42 | 显示全部楼层
现在正在看重定向这一章,等看完了把笔记整理一下再发
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-16 16:07:31 | 显示全部楼层
风吹来了 发表于 2020-3-16 16:05
感觉goto语句还是挺有意思的,跟大家分享一下,不过顺便说一下,这个goto语句创建的标签,即使还没有遇到go ...

会的,标签只是单纯地一个标记
但是用goto跳出去之后,goto后面的代码就不会执行了

评分

参与人数 1鱼币 +1 收起 理由
风吹来了 + 1 感谢无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-16 16:10:44 | 显示全部楼层
qiuyouzhi 发表于 2020-3-16 16:07
会的,标签只是单纯地一个标记
但是用goto跳出去之后,goto后面的代码就不会执行了

谢谢补充
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 21:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表