为了账号安全,请及时绑定邮箱和手机立即绑定

请问以下用法为什么会出现死循环啊,麻烦讲解一下goto语句的用法

请问以下用法为什么会出现死循环啊,麻烦讲解一下goto语句的用法

C PHP
ITMISS 2022-03-23 20:15:56
#include <stdio.h>#include <stdlib.h>int main (void){int i;num:printf ("a ");for (i = 0;i < 10;++i){goto num;}system ("pause");return 0;}请问为什么会出现死循环啊,希望详细讲解一下goto语句的用法。谢谢!
查看完整描述

3 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

执行到"goto代码"的时候,程序会自动跳到goto后面跟着的字符标志处,即"num"处..
但是"num"处位于"goto"代码之前,因此跳到了"num"的代码处向下走,会又一次碰到goto..
如此循环反复..因此会变为死循环...

另外goto语句的用法就是 goto+标志, 如题中例子 num就是"标志",当执行到goto的时候,会直接跳到"标志"的地方,在标志处继续向下执行..
c中的这个用法很常见,比如执行到某个地方用"goto"跳到另外一个地方接着执行.然后再用"goto"跳回来..
注:其中的标志可以任意设置,标志之间名字尽量不要重复.

查看完整回答
反对 回复 2022-03-28
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

goto 的功能:
每次执行到这句:goto 标记;程序会跳到 有标记的那句代码,如上面的:num:printf ("a ");

上述之所以会死循环是因为:运行到 goto num; —> num:printf("a"); —> for( i = 0; i < 10; ++i ) { }
此处会 i = 0(始终)。

可以这样改:
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
int i = 0;
num:
{
printf ("a ");
}
for ( ;i < 10; )
{
++i;
goto num;
}
system ("pause");
return 0;
}

这样改了之后还是不好,for() 循环语句的功能没有很好的体现(goto 跳出了for(语句1;语句2;语句3 ) 循环是不会执行 语句3 的)。
goto太灵活了,容易使得程序结构变乱(不知道跳过了那些语句)。
程序的调式建议使用 VC 的断点。



查看完整回答
反对 回复 2022-03-28
?
慕慕森

TA贡献1856条经验 获得超17个赞

只要向前并且没有条件的goto都是死循环。
num:
...
goto num;
执行到这句就回到前面执行。这不就是标准的死循环吗。
goto一般都是有条件的goto。比如:
if (error) goto ERROR;

ERROR:
错误处理
这样判断某种错误后就直接转到错误处理去,不要再做其他工作了。



查看完整回答
反对 回复 2022-03-28
  • 3 回答
  • 0 关注
  • 264 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号