SS-Infra ← ポータルに戻る
← 目次一覧に戻る

【第4回】C言語の条件分岐:if文とswitch文の使い方

1. はじめに:条件に応じて処理を分岐させよう

前回は、複数のデータをまとめて管理する配列や文字列、そして各種演算子の使い方を確認しました。

プログラムを作っていくうえで、「特定の条件を満たしたときだけにこの処理を行いたい」「ユーザーからの入力値やステータスに応じて処理を変えたい」という動的な制御は非常に重要になります。

C言語の条件分岐や制御構文の基本的な書き方は、PHPなどの高水準な言語と共通している部分が多くありますが、ユーザー入力を受け取る scanf 関数など、C言語ならではのメモリを意識したルールも存在します。

今回は、if 文や switch 文による条件分岐、論理演算子や三項演算子、そしてキーボード入力を受け取る scanf の仕組みを確認していきましょう。

2. if 文の基本パターン

特定の条件を満たした場合にのみ特定の処理を実行するための仕組みが if 文です。基本的な構文や書き方はPHPとほぼ共通しています。

単体の if 文

int error_code = 0;
if (error_code == 0) {
    printf("エラーは検出されませんでした。\n");
}

二者択一 (if ~ else 文) と多岐分岐 (if ~ else if 文)

状況に応じて処理を分ける基本的なパターンです。

// 二者択一の例
if (is_connected) {
    printf("サーバーに接続しています\n");
} else {
    printf("切断されました\n");
}

// 多岐分岐の例
if (http_status == 200) {
    printf("リクエストは正常に処理されました (OK)\n");
} else if (http_status == 404) {
    printf("指定されたリソースが見つかりません (Not Found)\n");
} else {
    printf("予期せぬステータスコードです\n");
}

3. 三項演算子

条件式の結果(真・偽)によって異なる値をコンパクトに代入・評価したい場合に、三項演算子を使用できます。

// 試行回数が上限を超えたら0にリセットし、そうでなければ1増やす
retry_count = (retry_count >= max_limit) ? 0 : ++retry_count;

4. 論理演算子

複数の条件を組み合わせて判定したい場合には、以下の論理演算子を使用します。

5. if 文の入れ子(ネスト)

条件分岐の中にさらに別の if 文を内包させることで、より複雑な条件判定を行うことができます。

if (is_maintenance_mode) {
    if (user_role == 99) {
        printf("メンテナンス中ですが管理者権限でアクセスを許可します\n");
    } else {
        printf("現在メンテナンス中です。しばらくお待ちください\n");
    }
} else if (is_banned_ip) {
    printf("アクセスが拒否されました (IP Block)\n");
} else {
    printf("通常アクセスのためルーティングを実行します\n");
}

6. キーボード入力を受け取る scanf 関数

実行中のコンソール画面から、キーボードを介してユーザーからの文字・数値入力を受け取る標準ライブラリ関数が scanf です。

基本的な使い方と注意点

7. switch 文

特定の変数の「値」に応じて、分岐先を多岐に切り替えたい場合には switch 文を使用します。

int log_level = 2;

switch (log_level) {
    case 1:
        printf("[DEBUG] 詳細なログを出力します\n");
        break;
    case 2:
        printf("[INFO] 通常の操作ログを出力します\n");
        break;
    case 3:
        printf("[ERROR] エラーログを出力します\n");
        break;
    default:
        printf("[UNKNOWN] 不明なログレベルです\n");
        break;
}

各 case の最後には、後続の処理へのフォールスルー(意図しない連続実行)を防ぐため、break; を忘れないように記述することが重要です。

8. まとめと次回予告

今回は、プログラムの流れを柔軟に制御するための条件分岐(if 文・switch 文)、三項演算子、論理演算子、そしてユーザー入力を受け取る scanf 関数の使い方を確認しました。

今回学んだ内容を整理すると、次のとおりです。

今回の内容を通して、ユーザーの入力や変数の状態に応じた動的なプログラムの組み立て方が見えてきたかと思います。

次回は、同じ処理を何度も効率よく実行するための「繰り返し処理(while文・for文)」について学びます。実際のコードを動かしながら、ループ処理の仕組みを確認していきましょう。

【お役立ちツールのご案内】

C言語やPHPの学習を進める中で、ご自身の書いたコードや既存のプロジェクトにセキュリティ上のリスクや古い書き方(非推奨関数など)が混ざっていないか気になった際は、安全な字句解析(token_get_all())で一括スキャンできる当サイトの PHPレガシーコードスキャナー もぜひご活用ください。