當前位置

首頁 > 商務英語 > 計算機英語 > c中goto的用法

c中goto的用法

推薦人: 來源: 閱讀: 2.71W 次

下面小編就跟你們詳細介紹下c中goto的用法的用法,希望對你們有用。

ing-bottom: 133.33%;">c中goto的用法

  c中goto的用法的用法如下:

break和continue的使用範圍比較一致,兩都可以用於循環,其中break還可以用於switch。功能上也有一定的相似性,break就相當於退學,continue則相當於跳級。對於break,程序究竟跳到哪兒比較好理解。但是continue究竟跳到哪兒去了,初學者可能有些疑惑,不妨就當它跳到了循環體最後一句語句的後面。

如果它們處在由多重循環和switch組成的圈圈裏,那麼它們就對包括它們的最裏層起作用。於是,設想一下子跳出多重循環的人可能忘不了goto。

Break語句不能用於循環語句(如for循環或while循環)和switch語句之外的任何其他語句中。

Continue語句和Break語句的區別是:Continue語句只結束本次循環,而不是終止整個循環的執行。而Break語句則是結束整個循環過程,不再判斷執行循環的條件是否成立。

引用:從上世紀60年代後期開始,不主張使用goto語句。……所有使用goto的程序都可以改寫成不用goto。

筆記:goto是一個很有爭議的語句,語多書本建議少用或不用它,我個人的習慣是堅決不用。不過,至於“上世紀60年代”這個說法,我倒是一直不知道。因爲我自己學習BASIC已經是1994年,那時候學的是帶行號的GW-BASIC,goto是必須用到的語句。莫非當時我們學校開設的課程居然是落後二十年的內容?

林銳博士對goto另有看法,他說:“錯誤是程序員自己造成的,不是goto的過錯。goto至少有一處可顯神通,它能從多重循環中咻地一下子跳到外面,……就像房子着火了,來不及從樓梯一級一級往下走,可從窗口跳出火坑。……”

我寫的程序目前還沒有超越三級循環。從最裏層往外跳,如果跳一層,就break,如果跳兩層或三層,一是這種可能性很小,二是如果真的碰到了,我就用其它條件來控制外層循環是否繼續break,自從1997年進入結構化的程序設計以來,我的確完全拋棄了goto。——VB中的“On Error Goto”除外,出現錯誤,自然不管在哪一層,都給我跳進錯誤處理中。

goto的目標是一個標號,這個標號的起名倒有點意思,因爲標號只用於goto,所以它的名字可以與任何變量名以及其它標識符一樣而不產生重名。以前的程序是帶行號的,所以就“goto 行號”,現在程序不帶行號了,但是允許在任何地方加標號。編譯器在碰到它們的時候,大概就是憑其後頭的冒號來判斷這個名字不需要檢驗合法性。那麼,C++中已有的“public:”算不算標號呢?

爲此,我做了個實驗:實驗內容一是我在類的聲明裏加入了一行“pub:”,二是我在程序段中加入了一行“public:”。結果發現兩都都不能通過編譯。也就是說,實驗一說明在類定義這樣的地方不允許使用標號(也用不着,因爲它不在任何函數內部,goto是運行時的事,與編譯無關,而且goto不允許跨函數跳越。),實驗二說明在程序段中的標號不允許使用保留字。

下面舉例說明:

#include <stdio.h>

void main()

{

int n, m;

/*這個循環輸出1 2 3 4, 在n是5的時候循環退出*/

for ( n = 1; n <= 10; n ++ )

{

if ( n == 5 )

break;

printf( " %d", n );

}

printf( "n" );

/*這個循環輸出1 2 3 4 6 7*/

for ( m = 1; m <= 10; m ++ )

{

/*在m是5的時候沒有執行當次循環的其他語句,所以未輸出5*/

if ( m == 5 )

continue;

/*在m是8的時候循環跳轉到RET處,連End都不會輸出,如果是break,還能輸出End*/

if ( m == 8 )

{

goto RET;

}

printf(" %d",m);

}

printf ("End");

RET:

return;

}