上一篇介紹了for loop的概念,讓大家面對在有重複性、明確次數的處理時,可以使用這個語法來解決問題。
這次我們來介紹迴圈中另一個很重要的語法--「While Loop」!
其實while迴圈與for迴圈的概念是很像的,都是為了處理重複性內容而生,但兩者最大的差別在於當沒有明確的次數處理時,會變得很不適合使用for迴圈(也不是不能用,就是不適合),取而代之的便是while迴圈了。
我們來看下列的例子:
#include <stdio.h>
int main(void)
{
    int data;
    printf("plz input your data(>0): ");
    scanf("%d", &data);
    while(data > 0){
        if(data%2 == 0){
            printf("this data is even.\n");
        }
        else{
            printf("this data is odd.\n");
        }
        printf("plz input your data(>0): ");
        scanf("%d", &data);
    }
    printf("---\n");
    printf("thanks for your using\n");
    return 0;
}

我們讓使用者輸入數字來判斷奇偶數,直到輸入的數字小於0時終止程式,由於不曉得使用者會輸入多少數字,所以這時候使用for loop相對的不適合,且這樣的方式比較具有彈性。
(1) while迴圈的基本結構:「( )」包住的內容為條件判斷,被「{ }」包住的內容為需重複執行的body。
while(data > 0){
    if(data%2 == 0){
        printf("this data is even.\n");
    }
    else{
        printf("this data is odd.\n");
    }
    printf("plz input your data(>0): ");
    scanf("%d", &data);
}

(2) 謹慎設條件,避免無限迴圈(程式出不去迴圈一直執行,會導致電腦當機或程式壞掉)。
(3) 讀取到使用者輸入才會執行的語法。
a. while(scanf("%d", &data) != EOF)
#include <stdio.h>
int main(void)
{
    int data;
    while(scanf("%d", &data) != EOF){
        if(data%2 == 0){
            printf("this data is even.\n");
        }
        else{
            printf("this data is odd.\n");
        }
    }
    return 0;
}

b. while(~scanf("%d", &data))
#include <stdio.h>
int main(void)
{
    int data;
    while(~scanf("%d", &data)){
        if(data%2 == 0){
            printf("this data is even.\n");
        }
        else{
            printf("this data is odd.\n");
        }
    }
    return 0;
}

c. while(scanf("%d", &data) != -1)
#include <stdio.h>
int main(void)
{
    int data;
    while(scanf("%d", &data) != -1){
        if(data%2 == 0){
            printf("this data is even.\n");
        }
        else{
            printf("this data is odd.\n");
        }
    }
    return 0;
}

#include <stdio.h>
int main(void)
{
    int data, i=0;
    while(scanf("%d", &data) != EOF){
        i++;
        if(data%2 == 0){
            printf("Case %d: EVEN.\n", i);
        }
        else{
            printf("Case %d: ODD.\n", i);
        }
    }
    return 0;
}
