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 關注
- 263 瀏覽
添加回答
舉報