天天看點

oracle goto和continue,goto,break和continue語句,C語言goto,break和continue跳轉語句詳解...

控制程式流程跳轉的通常有 goto、break、continue 等語句。

goto語句

goto 語句是一種無條件流程跳轉語句,通常 goto 語句與 if 語句結合使用,當滿足一定條件時,程式流程跳轉到指定标号處,接着往下執行。

定義語句辨別的格式如下。

語句辨別:語句;

其中,“語句辨別”可以是任一個合法的辨別符,如 pos_1、pos_2、label_1、label_2 等都是合法的語句辨別。注意,語句辨別後的冒号不能省略。

goto 語句的調用文法格式為:

goto 語句标号;

程式将從對應“語句标号”的代碼處開始往下執行。

【例 1】分析以下程式,了解 goto 語句的使用。

#include

int main (void){

int n;

pos_1:

printf("請輸入一個正整數:");

scanf("%d",&n);

if(n<0)

{

printf("輸入錯誤!\n");

goto pos_1;

}

printf("成功輸入正整數:%d\n",n);

return 0;

}

代碼分析:在上述程式代碼中,有一個語句标号 pos_1。該程式的執行流程如下:

pos_1 标号處。先提示使用者“請輸入一個正整數:”。

如果使用者輸入的是正整數,則提示“成功輸入正整數:***”。執行第 4 步。

如果使用者輸入的是負數,則進入循環體,提示“輸人錯誤!”。程式執行流程跳轉到 pos_1 處,即跳轉到第 1 步,繼續往下執行。

程式結束。

程式運作結果:假設某次運作,依次輸入 -2、-6、3 等數字,其運作結果如下:

請輸人一個正整數:-2

輸入錯誤!

請輸入一個正整數:-6

輸入錯誤!

請輸入一個正整數:3

成功輸入正整數:3

通過上述執行流程及運作結果的分析,可以發現該例中使用 goto 跳轉語句實作了循環的功能。故可以使用循環結構的代碼替換該 goto 結構的代碼。

等價實作代碼:

#include

int main (void)

{

int n;

printf ("請輸入一個正整數:");

scanf("%d",&n);

while(n<0)

{

printf ("輸入錯誤!\n");

printf ("請輸入一個正整數:");

scanf("%d",&n);

}

printf ("成功輸入正整數:%d\n",n);

return 0;

}

使用 goto 語句可能會造成程式層次不清晰,可讀性差,故在實際程式設計中,應盡量少使用或避免使用 goto 語句。

break語句

當執行到循環體中的 break 語句時,将終止 break 所在該層的循環,從該層循環體之後的語句開始繼續執行。

break 的執行流程如下所示。

單重循環情況:選用 while 循環結構示意,do-while 循環、for 循環同樣适用。

while (循環判斷表達式)

{

...

if(條件表達式)

break;

循環體中break後的語句;

}

循環體後的第 1 條語句;

循環體後的第 2 條語句;

...

在循環體中,當滿足一定條件執行到 break 語句時,終止 break 所在的該層循環,即“循環體中 break 後的語句”部分将不再被執行,程式執行流程轉向從“循環結構後的第 1 條語句”處,開始繼續往後執行。

雙重循環情況:使用雙重 for 循環嵌套結構示意,其他類型的循環嵌套組合同樣适用。

for (;循環判斷表達式1;)

{

...

for(;循環判斷表達式2;)

{

...

if(條件表達式)

break;

内層循環體中break後的語句;

}

内層循環結構後的第1條語句; 内層循環結構後的第2條語句;

...

}

在内層循環中,當滿足一定條件執行到 break 語句時,僅結束 break 所在内層循環的執行(在本輪外層循環中,“内層循環體中 break 後的語句”部分不再被執行),程式執行流程跳轉到“内層循環結構後的第 1 條語句”所在的外層循環體處,開始繼續執行。

【例 2】分析以下程式輸出結果,掌握 break 語句的使用方法。

#include

int main (void)

{

int s=0,i;

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

{

if (6==i)

break;

s+=i;

}

printf("sum=%d\n", s);

return 0;

}

當 i< 6時,均不執行 break 語句,可以将其忽略。即 i<6 時,等價于如下代碼。

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

{

s+=i;

}

相當于執行了加法運算 s=1+2+3+4+5=15。

當 i=6 時,執行 break 語句,立即終止 break 語句所在的該層 for 循環,故 i=6 并沒有累加到 s 上,接着從 for 循環結構後的第一條語句 printf("sum=%d\n",s); 處開始繼續執行。

程式運作結果為:

sum=15

continue語句

在循環體中設定 continue 語句,同樣可以改變循環的執行流程,隻不過它不像 break 那樣結束整個循環體,而是僅結束本次循環體的執行,提前進入下一次循環。

continue 語句的執行流程如下所示(選用 for 循環結構示意)。

for(初始表達式;循環判斷表達式;增量表達式)

{

...

if(條件表達式)

continue;

循環體中continue後的所有語句;

}

當在上述 for 循環中執行到 continue 語句時,本次循環體的執行流程将跳過“循環體中 continue 後的所有語句”,接着執行“增量表達式”部分,然後執行“循環判斷表達式”,即提前進入下一次循環的準備工作。

【例 3】分析以下程式輸出結果,掌握 continue 語句的使用方法。

#include

int main (void)

{

int s=0,i;

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

{

if(6==i)

continue;

s+=i;

}

printf("sum=%d\n",s);

return 0;

}

程式分析:

1) 當 i≠6 時,也就是 i≤5 時,忽略 continue 語句,相當于:

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

{

s+=i;

}

即:s=1+2+3+4+5

2) 當 i=6 時,執行 continue 語句,本次循環(i=6)體中 continue 後的語句 s+=i; 将被忽略,接着執行增量表達式 i++,相當于 i=6 沒有累加到 s 上。

3) 後續的循環中 i 不再可能等于 6,故 continue 語句也将被忽略。故程式功能相當于把 1〜10 中除 6 之外的 9 個數累加到 s 上。即 s=1+2+3+4+5+7+8+9+10=49。

運作結果為:

sum=49