【6日でできるC言語入門】条件分岐

 C言語のプログラムは、与えられた条件によって処理を切り替えることができます。これを「条件分岐」と呼びます。たとえば「数値が正ならメッセージを表示する」「点数が合格点以上なら合格、不合格ならメッセージを変える」といった使い方ができます。条件分岐は、プログラムの流れを柔軟に制御するための基本技術であり、実際の開発では必ず必要になる構文です。
 ここでは、if文・switch文の基本から、比較演算子、よく使われる条件分岐の書き方まで具体的に解説します。

1.if文による条件分岐

1.1. if文の基本

if文は「もし○○なら」という条件判断に使います。
書式は以下の通りです。

if (条件式) {
    // 条件が真(true)のとき実行される処理
}

1.2. 比較演算子の一覧

条件式では比較演算子を使い、値同士を比べます。主な演算子は以下の通りです。

演算子意味
>より大きいa > 0
>=以上a >= 0
<より小さいa < 0
<=以下a <= 0
==等しいa == 0
!=等しくないa != 0

2.if文のサンプルプログラム

2.1. 入力値の判定

以下は、入力された整数が偶数か奇数かを判定してメッセージを表示するサンプルです。

プロジェクト/ファイル名: Lesson19_1/main.c

#include <stdio.h>

int main(void) {
    int number;
    printf("整数を入力してください:");
    scanf("%d", &number);

    if (number % 2 == 0) {
        printf("入力した値は偶数です。\n");
    } else {
        printf("入力した値は奇数です。\n");
    }
    return 0;
}

scanf関数とSDLチェック

プログラムを実行すると、以下のように scanf 関数の部分に緑色の波線が表示されます。

 このプログラムを実行するためには、「SDLチェック」を無効にする必要があります。その理由は、 scanf 関数を使うからです。実は、この scanf 関数は安全性に問題があるため、使用することは推奨されていないのです。

6行目に出てくるscanf関数に注目します。

scanf("%d", &number);

 scanf(スキャンエフ)関数は、キーボードから入力した値を変数に代入する関数です。整数型の変数に値を入れるには、変数名の先頭に「&(アンパサンド)」を付け、前に整数を表す %d と記入します。

 その理由ですが、scanf は「どこに値を代入するか(=アドレス)」を知る必要があるからです。number だけ書くと「値(中身)」しか渡せません。&number とすることで、「numberのある場所(メモリアドレス)」を渡せるようになります。

「SDLチェック」あり

「SDLチェック」を外さずに、このプログラムを実行すると以下のエラーが発生して実行することができません。

戻り値が無視されました: 'scanf'
'scanf': This function or variable may be unsafe. Consider using scanf_s instead.
 To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
「SDLチェック」なし

「SDLチェック」を「いいえ」にして、プログラムを実行します。

実行結果

整数を入力してください:4
入力した値は偶数です。

整数を入力してください:7
入力した値は奇数です。

注意

Visual StudioではSDLチェックを「いいえ」にしないと、scanfなどの非推奨の関数は使えないようになっています。

2.2. else文とelse if文

if文には、条件に合わない場合の処理を書くelseや、複数条件を分岐するelse ifも使えます。

if (score >= 80) {
    printf("とても良い点数です!\n");
} else if (score >= 60) {
    printf("合格です。\n");
} else {
    printf("再試験です。\n");
}

3.switch文による条件分岐

3.1. switch文の基本

複数の値で分岐させたいときは、switch文が便利です。
主に「選択肢が複数あるメニュー」などで使われます。

switch (変数) {
    case 値1:
        // 値1のときの処理
        break;
    case 値2:
        // 値2のときの処理
        break;
    default:
        // それ以外の処理
        break;
}

3.2. switch文のサンプル

プロジェクト/ファイル名: Lesson19_2/main.c

#include <stdio.h>

int main(void) {
    int menu;
    printf("メニュー番号を選んでください(1~3):");
    scanf("%d", &menu);

    switch (menu) {
    case 1:
        printf("カレーを選びました。\n");
        break;
    case 2:
        printf("ラーメンを選びました。\n");
        break;
    case 3:
        printf("サラダを選びました。\n");
        break;
    default:
        printf("不正な番号です。\n");
        break;
    }
    return 0;
}

実行結果

「SDLチェック」を「いいえ」にして、プログラムを実行します。

メニュー番号を選んでください(1〜3):2
ラーメンを選びました。

まとめ

  • 条件分岐はif文やswitch文で実現できる。
  • 比較演算子やelse, else ifなどの構文も活用できる。
  • 条件による処理の分岐は、実用的なプログラム作成に欠かせない基本技術

条件分岐をマスターすると、プログラムで複雑な判断処理ができるようになります。