if文のネスト

if 文はネストすることができる。

if (count > max)
    if (error)
        printf("Error: Try again.\n");

else に続いてさらに if がネストするのを if-else-if の梯子(if-else-if ladder)とか if-lese-if の階段(if-else-if staircase)などと呼ぶらしい。
一般的には次の通り。

if (式)
    文;
else
    if (式)
        文;
    else
        if (式)
            文;
        else
            文;

ただし、これだとインデントがむやみに深くなるので、普通は次のように書く。

if (式)
    文;
else if (式)
    文;
else if (式)
    文;
else
    文;

もっと言えば、たとえ文が1つしかなくてもコードブロックを作ったほうが見やすいと思うな。

次のプログラムは、円、長方形、三角形のいずれかを選択して、その面積を計算する。

#include

int main(void)
{
    char ch;
    float x, y;

    printf("Choice: Circle(C), Rectangle(R), Triangle(T): ");
    ch = getchar();

    if (ch == 'C') {
        printf("Radius? ");
        scanf("%f", &x);
        printf("%f\n", x * x * 3.14);
    } else if (ch == 'R') {
        printf("X? ");
        scanf("%f", &x);
        printf("Y? ");
        scanf("%f", &y);
        printf("%f\n", x * y);
    } else if (ch == 'T') {
        printf("Width? ");
        scanf("%f", &x);
        printf("Height? ");
        scanf("%f", &y);
        printf("%f\n", 0.5 * x * y);
    } else {
        printf("Error.\n");
    }

    return 0;
}

実行例:

takatoh@nightschool $ ./sample_3_2
Choice: Circle(C), Rectangle(R), Triangle(T): C
Radius? 2.5
19.625000
takatoh@nightschool $ ./sample_3_2
Choice: Circle(C), Rectangle(R), Triangle(T): R  
X? 2.0
Y? 3.5
7.000000
takatoh@nightschool $ ./sample_3_2
Choice: Circle(C), Rectangle(R), Triangle(T): T
Width? 4.0
Height? 3.0
6.000000
takatoh@nightschool $ ./sample_3_2
Choice: Circle(C), Rectangle(R), Triangle(T): A
Error.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください