亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請問以下用法為什么會出現死循環啊,麻煩講解一下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 關注
  • 263 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號