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

#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语句的用法。谢谢!

ITMISS
浏览 265回答 3
3回答

慕的地6264312

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

元芳怎么了

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

慕慕森

只要向前并且没有条件的goto都是死循环。num:...goto num;执行到这句就回到前面执行。这不就是标准的死循环吗。goto一般都是有条件的goto。比如:if (error) goto ERROR;ERROR:错误处理这样判断某种错误后就直接转到错误处理去,不要再做其他工作了。
打开App,查看更多内容
随时随地看视频慕课网APP