C言語 switch-case文の使い方:数値、文字列で複数条件分岐

2024-04-02

C言語のswitch文:分かりやすく解説

switch文の基本構成

switch (変数) {
  case1:
    処理1;
    break;
  case2:
    処理2;
    break;
  ...
  default:
    処理n;
}

1 変数

switch文で評価する変数です。整数型、文字型、enum型など、様々な型が使用できます。

2 case

各条件を表します。caseの後に評価する値を記述します。

3 処理

各条件に合致した場合に実行される処理を記述します。複数の文を記述したい場合は、{ }で囲みます。

4 break

break文は、処理が終了したことを示し、switch文から抜け出します。記述しないと、次のcaseの処理まで実行されてしまいます。

5 default

どのcaseにも合致しなかった場合に実行される処理を記述します。省略可能です。

例題

曜日判定

int day = 1; // 1: 月曜日, 2: 火曜日, ...

switch (day) {
  case 1:
    printf("月曜日です。");
    break;
  case 2:
    printf("火曜日です。");
    break;
  ...
  default:
    printf("無効な曜日です。");
}

文字列比較

char ch = 'a';

switch (ch) {
  case 'a':
    printf("文字 'a' です。");
    break;
  case 'b':
    printf("文字 'b' です。");
    break;
  ...
  default:
    printf("不明な文字です。");
}
  • 簡潔なコード: if文のネストと比べてコードを簡潔に書けるため、可読性と保守性を向上できます。
  • 効率的な処理: 条件分岐処理を効率的に実行できます。
  • 拡張性: 多くの条件分岐にも容易に対応できます。

注意点

  • break文の記述: 各caseの処理の最後にbreak文を記述する必要があります。
  • default句: default句は省略可能ですが、すべての条件に合致しない場合に備えて記述しておくことをおすすめします。
  • データ型: switch文で評価する変数のデータ型に注意が必要です。

まとめ

switch文は、複数の条件分岐を処理する便利な機能です。C言語プログラミングにおいて、積極的に活用しましょう。



C言語のswitch文:豊富なサンプルコード

曜日判定

int day = 1; // 1: 月曜日, 2: 火曜日, ...

switch (day) {
  case 1:
    printf("月曜日です。\n");
    break;
  case 2:
    printf("火曜日です。\n");
    break;
  case 3:
    printf("水曜日です。\n");
    break;
  case 4:
    printf("木曜日です。\n");
    break;
  case 5:
    printf("金曜日です。\n");
    break;
  case 6:
    printf("土曜日です。\n");
    break;
  case 7:
    printf("日曜日です。\n");
    break;
  default:
    printf("無効な曜日です。\n");
}

文字列比較

char ch = 'a';

switch (ch) {
  case 'a':
    printf("文字 'a' です。\n");
    break;
  case 'b':
    printf("文字 'b' です。\n");
    break;
  case 'c':
    printf("文字 'c' です。\n");
    break;
  default:
    printf("不明な文字です。\n");
}

季節判定

int month = 4; // 1: 1月, 2: 2月, ...

switch (month) {
  case 12:
  case 1:
  case 2:
    printf("冬です。\n");
    break;
  case 3:
  case 4:
  case 5:
    printf("春です。\n");
    break;
  case 6:
  case 7:
  case 8:
    printf("夏です。\n");
    break;
  case 9:
  case 10:
  case 11:
    printf("秋です。\n");
    break;
  default:
    printf("無効な月です。\n");
}

四則演算

int num1 = 10, num2 = 5, op = '+';

switch (op) {
  case '+':
    printf("%d + %d = %d\n", num1, num2, num1 + num2);
    break;
  case '-':
    printf("%d - %d = %d\n", num1, num2, num1 - num2);
    break;
  case '*':
    printf("%d * %d = %d\n", num1, num2, num1 * num2);
    break;
  case '/':
    if (num2 == 0) {
      printf("0による除算はできません。\n");
    } else {
      printf("%d / %d = %d\n", num1, num2, num1 / num2);
    }
    break;
  default:
    printf("無効な演算子です。\n");
}

enum型を使った判定

enum week { MON, TUE, WED, THU, FRI, SAT, SUN };

enum week day = MON;

switch (day) {
  case MON:
    printf("月曜日です。\n");
    break;
  case TUE:
    printf("火曜日です。\n");
    break;
  case WED:
    printf("水曜日です。\n");
    break;
  case THU:
    printf("木曜日です。\n");
    break;
  case FRI:
    printf("金曜日です。\n");
    break;
  case SAT:
    printf("土曜日です。\n");
    break;
  case SUN:
    printf("日曜日です。\n");
    break;
}

連続するcaseラベルのまとめ

int score = 80;

switch (score) {
  case 90:
  case 91:
  case 92:
  case 93:
  case 94:
    printf("Aです。\n");
    break;
  case 80:
  


C言語におけるswitch文の代替方法

if文のネスト

最も単純な代替方法は、if文をネストさせることです。ただし、条件分岐の数が増えるとコードが冗長になり、可読性が低下します。

int num = 1;

if (num == 1) {
  printf("1です。\n");
} else if (num == 2) {
  printf("2です。\n");
} else if (num == 3) {
  printf("3です。\n");
} else {
  printf("その他です。\n");
}

goto文を使用




typeof_unqual の代替方法:型キャスト、マクロ、C++ の std::decay

C言語における typeof_unqual キーワードは、オペランドの型を 修飾子なしの型名 で取得するために使用されます。これは、型推論やジェネリックプログラミングなどの高度なプログラミング技法を可能にする強力なツールです。typeof_unqual の役割



C言語におけるスレッドストレージ期間:詳細リファレンス

C言語では、スレッドローカル変数のストレージ期間は、以下の2種類に分類されます。静的スレッドストレージ期間: 変数はプログラムの開始から終了まで存続します。自動スレッドストレージ期間: 変数は関数呼び出しの間のみ存続します。静的スレッドストレージ期間を持つ変数は、以下の特徴を持ちます。


volatile 型修飾子のサンプルコード

メモリアクセスに対する順序の保証volatile修飾された変数へのアクセスは、プログラムの順序に従って実行されます。これは、コンパイラが変数の値をレジスタに保持したり、異なる順序でアクセスしたりすることを防ぎます。外部からの変更の可能性を考慮


tss_create 関数のサンプルコード

tss_create関数の概要:プロトタイプ:引数: key: TLSキーへのポインタ。このキーは、tss_getやtss_setなどの他のTLS関数で使用されます。 destructor: スレッドが終了する際に呼び出される関数ポインタ。この関数は、TLS領域に割り当てられたメモリを解放するために使用されます。


C言語で現在時刻を取得する

引数ts: 現在のカレンダー時間を格納する struct timespec 型のポインターbase: 使用するタイムベース。以下のいずれかの値を指定できます。 TIME_UTC: Coordinated Universal Time (UTC) TIME_LOCAL: システムのローカルタイム



llabs 関数のサンプルコード

概要関数名: llabs引数: long long 型整数戻り値: 引数の絶対値 (long long 型)ヘッダーファイル: stdlib. h動作llabs は、引数として渡された long long 型整数の符号を反転し、絶対値を返します。


C言語における評価順序とは?

C言語には、以下の 演算子グループ と 優先順位 が定められています。例この式の場合、* 演算子の優先順位が + 演算子よりも高いため、まず 20 * 3 が計算され、その結果 (60) が 10 と加算されます。シーケンスポイント は、式の評価順序が明確に定義されている箇所です。C言語には、以下の箇所がシーケンスポイントとなります。


C言語プログラミング:strfromd関数を使って文字列から数値に変換する方法

strfromd 関数は、以下の形式で記述されます。引数str: 変換対象となる文字列へのポインタresult: 変換結果を格納する double 型の変数へのポインタ戻り値変換成功:文字列の先頭からの変換された文字数変換失敗:0strfromd 関数は、以下の手順で使用します。


【プログラミング初心者必見】C言語で複素数 hyperbolic 余弦関数を計算する cacoshf 関数

関数詳細関数名: cacoshfヘッダーファイル: complex. h引数: z - 計算対象の複素数戻り値: z の hyperbolic 余弦値 (複素数)エラー処理: errno 変数に EDOM エラーコードを設定してエラーを報告します。


vwscanf 関数を使ったファイル読み込み:サンプルコード集

vwscanf 関数の概要:vwscanf は可変引数関数であり、以下の形式で記述されます。stream: データを読み込むストリーム。stdin またはファイルポインタを指定できます。format: 読み込むデータのフォーマットを指定する文字列。