3 回答

TA贡献1817条经验 获得超6个赞
执行到"goto代码"的时候,程序会自动跳到goto后面跟着的字符标志处,即"num"处..
但是"num"处位于"goto"代码之前,因此跳到了"num"的代码处向下走,会又一次碰到goto..
如此循环反复..因此会变为死循环...
另外goto语句的用法就是 goto+标志, 如题中例子 num就是"标志",当执行到goto的时候,会直接跳到"标志"的地方,在标志处继续向下执行..
c中的这个用法很常见,比如执行到某个地方用"goto"跳到另外一个地方接着执行.然后再用"goto"跳回来..
注:其中的标志可以任意设置,标志之间名字尽量不要重复.

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 的断点。

TA贡献1856条经验 获得超17个赞
只要向前并且没有条件的goto都是死循环。
num:
...
goto num;
执行到这句就回到前面执行。这不就是标准的死循环吗。
goto一般都是有条件的goto。比如:
if (error) goto ERROR;
ERROR:
错误处理
这样判断某种错误后就直接转到错误处理去,不要再做其他工作了。
- 3 回答
- 0 关注
- 264 浏览
添加回答
举报