【独学C言語】while文(繰り返し処理)

※この記事は「2020年12月8日」に更新しました。

今回は、while文(繰り返し処理)について。

前回、switch文(条件分岐)を紹介しました。

【独学C言語】switch文(条件分岐)

【独学C言語】switch文(条件分岐)

2020年4月16日

制御文には、if文や switch文などの条件分岐の他に、while文や for文などの繰り返し(ループ)処理を行うものがあります。

while文とは

while文は、繰り返し処理を行うための制御文です。

ループ処理とも言われており、条件式が真である限り、繰り返し処理が実行され続けます。

while文の書き方

while文の書き方です。

while(条件式)
{
    処理
}

注意点は条件式が真である限り、永遠に処理を繰り返し続けるということです。

基本は、停止するための制御を行います。

どのようにして使うかは、サンプルプログラムで紹介します。



do while文とは

do while文も、繰り返し処理を行うための制御文です。

while文との違いは、条件評価を行うタイミングです。

while文は、ループの最初に条件評価を行いますが、do while文は、ループの終端で条件評価を行います。

do while文の書き方

do while文の書き方です。

do
{
    処理
}while(条件式);

こちらも条件式が真である限り、永遠に処理を繰り返し続けるので注意が必要です。

サンプルプログラム【C言語】

while文(繰り返し処理)を理解するためのサンプルプログラムです。

前回のサンプルプログラムを改良します。

0~6 以外の数値が入力された場合は、ループさせます。

sample1.c というソースファイルを作成します。

#include <stdio.h>

int main(void)
{
    int number;    /* 曜日を表す数値 */

    number = 7;    /* 0~6以外で初期化 */

    while(number < 0 || number > 6)
    {
        printf("\n");
        printf("Input number : ");    /* 数値を入力する */
        scanf("%d", &number);
    }

    printf("\n");

    switch(number)
    {
        case 0:    /* 日曜日 */
            printf("Sunday.\n");
            break;
        case 1:    /* 月曜日 */
            printf("Monday.\n");
            break;
        case 2:    /* 火曜日 */
            printf("Tuesday.\n");
            break;
        case 3:    /* 水曜日 */
            printf("Wednesday.\n");
            break;
        case 4:    /* 木曜日 */
            printf("Thursday.\n");
            break;
        case 5:    /* 金曜日 */
            printf("Friday.\n");
            break;
        case 6:    /* 土曜日 */
            printf("Suturday.\n");
            break;
        default:    /* それ以外 */
            printf("Unexpected error.\n");
            break;
    }


    printf("\n");

    return 0;
}

実行結果は以下の通りです。

while文(繰り返し処理)

最初に 7 を入力して、11、13 と入力しています。

0 で while の条件式が偽になるので、ループを抜けます。

しかし、これだと、エラーメッセージがないので、使っている人からすれば、非常にわかりにくいプログラムです。

もう少し改良します。

sample2.c というソースファイルを作成します。

#include <stdio.h>

int main(void)
{
    int number;    /* 曜日を表す数値 */

    while(1)    /* 暴走した場合、Ctrl + C で強制終了してください */
    {
        printf("\n");
        printf("Input number : ");   /* 数値を入力する */
        scanf("%d", &number);

        if(number >= 0 && number <= 6)
        {
            break;
        }

        printf("\n");
        printf("Please Input 0-6.\n");    /* エラーメッセージ */
    }

    printf("\n");

    switch(number)
    {
        case 0:    /* 日曜日 */
            printf("Sunday.\n");
            break;
        case 1:    /* 月曜日 */
            printf("Monday.\n");
            break;
        case 2:    /* 火曜日 */
            printf("Tuesday.\n");
            break;
        case 3:    /* 水曜日 */
            printf("Wednesday.\n");
            break;
        case 4:    /* 木曜日 */
            printf("Thursday.\n");
            break;
        case 5:    /* 金曜日 */
            printf("Friday.\n");
            break;
        case 6:    /* 土曜日 */
            printf("Suturday.\n");
            break;
        default:    /* それ以外 */
            printf("Unexpected error.\n");
            break;
    }

    printf("\n");

    return 0;
}

while(1) という無限ループを利用して、エラーメッセージを表示させるようにしました。

実行結果は以下の通りです。

しかし、実は、これでもまだ不完全だったりします。

例えば、文字を入力した場合、scanf関数がマッチングせずにプログラムが暴走します(暴走したら、Ctrl + C で強制終了させましょう)。

こういったエラーを想定して書くこともプログラミングでは重要だったりします。

長くなるので紹介はしませんが、開発者視点だけでなく、ユーザー視点でコーディングできるようなプログラマーを目指しましょう。

独学C言語の記事について【おまけ】

タカフミブログの独学C言語シリーズは、C言語を独学するということを目的に記事を書いています。

他の記事に興味がある方は以下をご参照下さい。

C言語に関する記事一覧

C言語は、古典的なイメージがある方もいるかもしれませんが、他の多くのプログラミング言語のベースになっています。

実際に本格的なソフトを開発するとなるとなかなか大変ですが、とにかくハードウェアのリソースが少なくても高速に動くのが最大のメリットです。

プログラマーや SE(システムエンジニア)を目指す方は一度お試し下さい。

最後に【while文について】

いかがでしょうか。

次回は、for文(繰り返し処理)について、解説していきます。

【独学C言語】for文(繰り返し処理)

【独学C言語】for文(繰り返し処理)

2020年4月20日

今回は、while文(繰り返し処理)について、紹介しました。

相手に入力をさせるようなループ処理は、注意が必要です。

しっかりバリデーションをしないとどんな値が入力されるかわからないからです。

もし、サンプルプログラムで scanf関数(%d)に文字を入力して、暴走してしまった方はわかっていただけるかと思います。

文字を表示するだけのものなら問題ありませんが、実際のサービスだと大変なことになります(実は、通常のシステム開発では、scanf関数は利用されなかったりします)。