오늘 저를 괴롭했던, 문제의 샘플입니다.

=======================================================================

#include <stdio.h>

int main()
{
if(1 == 0 )
if( 1 == 1)
printf("1번");
else
printf("2번\n");

return 0;
}

========================================================================
쉽게 생각한다면 예상대로 라면  1==0 은 false 이기 때문에 2번이 출력되어야 할 것 같습니다.
그러나 실제로 실행한다면 아무것도 출력하지 않습니다.

여기에는 속임수가 있습니다. indention(들여쓰기)이 잘못되었다는 것입니다. 제대로 들여쓰기 한다면 다음과 같습니다.
==========================================================================
#include
<stdio.h>
int main()
{
if(1 == 0 )
if( 1 == 1)
printf("1번");
else
printf("2번\n");

return 0;
}
====================================================================
 else 문이 처음의  if(1 == 0 ) 의 else 를 의미하지 않고  if( 1 == 1) 가 아닐 때를 의미합니다.
else는 가장 가까운 if 것입니다. 컴파일러 시간에 이 문제를 Dangling else problem 이라고 들었습니다.
if (0) if (1) other else other  이런식의 구문이 있을 때 마지막의 else 는 if(0) 의 것인가 if(1)의 else 인가 하는 문제에서 Most closely nested rule 에 의해 가장 가까운 if(1)의 else를 뜻하는 것으로 대부분의 언어가 사용하고 있습니다.

 처음 예제에서 2번이라는 글자까 찍히게 하려면
이런식으로
==============================================================

#include <stdio.h>

int main()
{
if(1 == 0 )
{
if( 1 == 1)
printf("1번");
}
else
printf("2번\n");


return 0;
}
=================================================================
 중괄호를 잘 사용해야 합니다.  어째든 결론은 if 다음에는 중괄호를 잘 사용하자.. 물론 현실적으로는 이게 어려우므로 중복 if 문에는 중괄호를 잘 사용하는 정도로 하는게 좋을 것 같습니다.