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.