if文のネスティング
if文の中に別のif文を入れ、
if (A) {
if (B) {
/* Aが真、かつBが真の場合に実行される */
} else {
/* Aが真、かつBが偽の場合に実行される */
}
} else {
if (C) {
/* Aが偽、かつCが真の場合に実行される */
} else {
/* Aが偽、かつCが偽の場合に実行される */
}
}
ネスティング時のelseの注意
複数のif文がネスティングしている場合、
たとえば、
if (A)
if (B) {
/* Aが真、かつBが真の場合に実行される */
}
else {
/* Aが偽の場合に実行されるつもり */
}
しかしこのelseは、
if (A) {
if (B) {
/* Aが真、かつBが真の場合に実行される */
} else {
/* Aが真、かつBが偽の場合に実行される */
}
}
この問題の原因は、
if (A) {
if (B) {
/* Aが真、かつBが真の場合に実行される */
}
} else {
/* Aが偽の場合に実行される */
}
else if による複数の場合分け
たとえば、
#include <stdio.h>
int
main()
{
int i;
/* i = 1; */
i = 2;
/* i = 3; */
/* i = 4; */
if (i == 1) {
printf("i == 1\n");
} else if (i == 2) {
printf("i == 2\n");
} else if (i == 3) {
printf("i == 3\n");
} else {
printf("i != 1 && i != 2 && i != 3\n");
}
return 0;
}
$ gcc -O2 -o else_if else_if.c $ ./else_if i == 2 $
なお、
#include <stdio.h>
int
main()
{
int i;
/* i = 1; */
i = 2;
/* i = 3; */
/* i = 4; */
if (i == 1) {
printf("i == 1\n");
} else {
if (i == 2) {
printf("i == 2\n");
} else {
if (i == 3) {
printf("i == 3\n");
} else {
printf("i != 1 && i != 2 && i != 3\n");
}
}
}
return 0;
}
しかし、