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.