Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C/C++のswitch-case文で範囲を指定して使う方法

CやC++では、値に応じて処理を分岐させる際にswitch-case文をよく利用します。通常、switch文に渡した値と各caseラベルの値が一致するかどうかを1つずつ確認しますが、実は範囲(range)を指定したcaseを書くことも可能です。

caseで範囲を指定する構文は次の通りです。

case low ... high

caseキーワードの後に、まず下限値(low)を記述し、その後に半角スペース、3つのドット(...)、さらに半角スペースを挟んで、上限値(high)を続けます。

それでは、範囲指定のcase文を使ったプログラムの動作を見てみましょう。

サンプルプログラム

次のプログラムでは、配列内の各値がどの範囲に属するかを判定し、その結果を出力します。

#include <stdio.h>
main() {
    int data[10] = { 5, 4, 10, 25, 60, 47, 23, 80, 14, 11};
    int i;
    for(i = 0; i < 10; i++) {
        switch (data[i]) {
            case 1 ... 10:
                printf("%d in range 1 to 10\n", data[i]);
            break;
            case 11 ... 20:
                printf("%d in range 11 to 20\n", data[i]);
            break;
            case 21 ... 30:
                printf("%d in range 21 to 30\n", data[i]);
            break;
            case 31 ... 40:
                printf("%d in range 31 to 40\n", data[i]);
            break;
            default:
                printf("%d Exceeds the range\n", data[i]);
            break;
        }
    }
}

実行結果

5 in range 1 to 10
4 in range 1 to 10
10 in range 1 to 10
25 in range 21 to 30
60 Exceeds the range
47 Exceeds the range
23 in range 21 to 30
80 Exceeds the range
14 in range 11 to 20
11 in range 11 to 20

注意点

この「...」による範囲指定はGCCの拡張機能であり、標準のC/C++規格には含まれていません。そのため、GCCやClangなど対応しているコンパイラでのみ動作します。移植性を重視するコードでは、従来どおりのif-else文による範囲判定への置き換えを検討するとよいでしょう。

  1. C/C++でセミコロン(;)を使わずにセミコロンを出力する方法

    このチュートリアルでは、C/C++においてセミコロン(;)を一切記述せずにセミコロンを出力するプログラムについて解説します。一見不可能に思えますが、これを実現する方法は主に2つあります。ひとつはセミコロンのASCII値を利用する方法、もうひとつはユーザー定義マクロを利用する方法です。セミコロンのASCII値は「59」であることを利用すると、文字リテラル ; を直接書かなくても出力が可能になります。それぞれの方法を見ていきましょう。方法1:putchar() 関数を使うputchar() 関数は、指定したASCIIコードに対応する1文字を標準出力に書き出します。引数として 59 を渡すことで、セ

  2. C/C++で学ぶAA木(AA Tree)とは?基本概念と平衡化操作を徹底解説

    AA木(AA Tree)とはコンピュータサイエンスにおいて、AA木(AA Tree)とは、順序付きデータを効率的に格納・検索するために実装された平衡木(バランスドツリー)の一種です。AA木は、赤黒木(Red-Black Tree)の変種として扱われます。赤黒木は二分探索木の一形態であり、要素の追加や削除を効率的にサポートします。赤黒木と大きく異なる点は、AA木では赤いノードを右の子としてのみ追加でき、左の子としては配置できないという制約があることです。この制約により、2-3-4木ではなく2-3木をシミュレートすることになり、その結果、木の保守操作が大幅に簡素化されます。赤黒木の平衡化アルゴリズ