C言語

繰り返し処理~while編~

C言語では、for文と同様に、同じ処理を繰り返す文があります。その文がwhile文です。

while文の書き方

while文の構文は次のようになります。

構文

while( 条件式 )
{
文 ;
}

while文では、条件式が真である間、下のブロックの文を繰り返し処理することができます。

サンプルプログラムを次に示します。

#include <stdio.h>

int main(void)
{
    int number = 1;

    while( number != 0 )
    {
        scanf("%d", &number);
        printf("%dが入力されました。¥n", number);
    }
    printf("繰り返しを終了します。¥n");

    return 0;
}

while文の条件式は、numberの値が0以外のときに、while文の下のブロックを実行します。numberの値が0のときはwhile文を終了します。
このため、最初にnumberの値を0以外に初期化しています。
while文の下のブロック内の処理は、キーボードからの入力を行い、入力した値と文字を表示するというものです。
処理が終わったら、また、while文の条件式の判定を行います。入力した値が0以外なら、また、while文のブロックを実行します。
入力した値が0になるまで繰り返すことになります。
0を入力すると、number != 0 の判定は、偽となり、while文を終了して、そのあとのprintf文が実行されてプログラムが終了します。

実行結果の一例を次に示します。

実行結果

1       ←入力したデータ
1が入力されました。
9       ←入力したデータ
9が入力されました。
0       ←入力したデータ
0が入力されました。
繰り返しを終了します。

このサンプルプログラムのwhile文の条件式は、number != 0 としましたが、この場合は、次のように記述することもできます。

while( number )

これは、if文のときに説明したことと同様に、値が0以外は真となり、0のときは偽となるため、変数のみの記述でも同じ結果になります。

while文は、for文の条件式だけにした場合と同じになります。
このため、while文を使用してもfor文と同じ使い方ができます。

for文

for( 初期化 ; 条件式 ; 変数更新 )
{
文 ;
}

for文の構文をwhile文に当てはめると次のようになります。

while文

初期化 ;
while( 条件式 )
{
文 ;
変数更新 ;
}

このようにfor文とwhile文は書き方が異なるのみで同じ繰り返し処理を行えます。
ただ、基本的には、回数が決まっている場合は、for文を使用し、回数が決まっていないものはwhile文を使うのが慣習となっています。
また、while文の変数更新の処理を記述し忘れると、条件式が偽にならなくなり、無限ループとなりますので、注意が必要です。

while文の使い方は以上になりますが、while文の条件式が偽にならない

while文の書き方を少し変えた繰り返し処理の文もありますので、そちらについても学びたいと思います。

do~while文の使い方

do~while文は、while文は、ほとんど同じ文になります。
do~while文の構文は次のようになります。

構文

do {
文 ;
} while( 条件式 ) ;

while文が下に記述されていますが、条件式の意味はwhile文と同じです。

while文の条件式の ( ) のあとに;が必要になりますので、注意する必要があります。

while文との違いは、条件式が後になることです。
while文は、先に条件式の判定を行っていましたが、do~while文は、最初は文を無条件で実行し、最後に条件式の判定を行います。
そして、条件式の判定で、真となった場合、doの下の文を実行します。
繰り返し文が必ず1回は実行されるのがdo~while文の特徴になります。

ただ、この特徴以外はwhile文と同じであるため、あまり使用されることはないかもしれません。

do~while文のサンプルプログラムを次に示します。

#include <stdio.h>

int main(void)
{
    int number = 0;

    do {
        printf("1~9を入力してください。¥n");
        scanf("%d", &number);
    } while( ( number < 1 ) && ( number > 9 ) );

    printf("%dが入力されました。¥n", number);

    return 0;
}

実行結果の一例を次に示します。

実行結果

1~9を入力してください。
0            ←入力したデータ
1~9を入力してください。
10            ←入力したデータ
1~9を入力してください。
5            ←入力したデータ
5が入力されました。

1~9以外が入力された場合に繰り返し処理が行われます。
1~9のいずれかを入力した場合は、条件式が不成立となり、while文を終了します。

繰り返し処理については、以上になります。

次は、複数の値をまとめて扱う配列について学びます。

複数の値をまとめて扱う配列の使い方

-C言語