C語言簡介:迴圈控制

本文為C語言簡介系列第四篇文章,前一篇文章為C語言簡介:迴圈

上篇提到薛西弗斯的故事,如果今天眾神給薛西弗斯優待,只要達到某些條件就能提前結束推石頭的任務?
或者,在程式上,當我有以下程式

1
2
3
4
5
6
7
#include <stdio.h>
int main(){
for (int i = 0; i <= 10; i++) {
printf("%d\n", i);
}
return 0;
}

但我想遇到特定情況就退出迴圈,或是只要符合某些特定條件就不要輸出呢?

break

假設今天我要讓我的迴圈輸出我所輸入的數直到EOF,我們可以寫出

1
2
3
4
5
6
7
8
#include <stdio.h>
int main(){
int n = 0;
while (scanf("%d", &n) != EOF) {
printf("%d\n", n);
}
return 0;
}

對吧?
不過,如果我今天加上一個限制:只要輸入的數字是 -1,我不但不輸出 -1,還直接退出迴圈呢?
這時 break 就能派上用場啦!
先提供以下程式碼給各位參考

break_example.c
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
int main(){
int n = 0;
while (scanf("%d", &n) != EOF) {
if (n == -1) { // 當 n 為 -1 時
break; // 跳出迴圈
}
printf("%d\n", n);
}
return 0;
}

第5至7行的程式的意思是說,如果我輸入的數是 -1if (n == -1)),則跳出迴圈(break)。
由此可見,break 的作用是使程式離開當前的迴圈。

試試看

試寫出一程式,輸出使用者輸入的數直到EOF,當輸入的數為-1或7時跳出迴圈。

試試看

觀察以下程式碼,並試推論輸出為何?

break_try.c
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
int main(){
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 5; j++) {
if (i == 2 && j == 3) {
break;
}
printf("i = %d, j = %d\n", i, j);
}
}
return 0;
}

continue

如果我想把程式改成「輸出使用者輸入的數直到EOF,但當使用者輸入的數為10時,不輸出但也不結束程式」怎麼辦呢?
一樣,先提供以下程式碼給各位參考

continue_example.c
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
int main(){
int n = 0;
while (scanf("%d", &n) != EOF) {
if (n == 10) { // 當 n 為 10 時
continue; // 跳過本次迴圈
}
printf("%d\n", n);
}
return 0;
}

第6行備註寫「跳過本次迴圈」,這裡的意思是指回到第4行的 scanf() 繼續讀取輸入,而不是執行第8行的 printf("%d\n", n)。也就是說,跳過本次迴圈剩餘的程式,直接進入下一次的迴圈

試試看

試寫出一程式,輸出使用者輸入的數直到EOF,當輸入的數為-1時不輸出但不結束程式

break與continue的特性

breakcontinue 有一個共同的特性就是:他作用的是他所在的最內層的迴圈。
舉個例子

break1.c
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
int main(){
for (int i = 1; i <= 5; i++) { // 迴圈1
for (int j = 1; j <= 5; j++) { // 迴圈2
if (i == 3) {
break;
}
printf("i = %d, j = %d\n", i, j);
}
}
return 0;
}

大家可以觀察一下,實際執行後會發現 break1.cbreak 跳離的是迴圈2但並未跳出迴圈1,這就是我所指的,break 會使程式離開他所屬的最內層的迴圈。

試試看

觀察以下程式碼,並試推論輸出為何?

continue_try.c
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
int main(){
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 5; j++) {
if (i == 2 && j == 3) {
continue;
}
printf("i = %d, j = %d\n", i, j);
}
}
return 0;
}

結語

以上就是C語言迴圈控制(break與continue部分)的簡介。
倘內容有誤或仍有疑問,歡迎在下方留言區留言!