강좌 & 팁
3.3.4 다중 if 문
if 문이나 if -else 문에서는 if 절이나 else 절 내에 또 다른 if 문이 들어가는 다중 if 문이 되는 경우가 흔히 있다.
다음 예제를 통해 다중 if문의 사용법을 알아보자
#include <stdio.h>
int main(){
int score;
char grade = 'X'
printf( " please enter test score: ");
scanf( "%d", &score);
if ((score <= 100) && (score >= 90)) grade = 'A';
else if ((score < 90) && (score >= 80)) grade = 'B';
else if ((score < 80) && (score >= 70)) grade = 'C';
else if ((score < 70) && (score >= 60)) grade = 'D';
else if ((score < 60) && (score >= 0)) grade = 'F';
else printf ("Wrong Score\n");
printf("The Grade is %c\n", grade);
return 0;
}
if 문의 &&는 논리연산자로 두 조건이 모두 만족되어야 참이되는 식이다.
char grade = 'x';에서 grade를 초기화 하지 않으면 score 값의 입력이 잘못된 경우에 grade가 미정값을 가지게 되므로 printf문에서 이상한 값을 출력할 수 있게 된다.
예제에서는 점수가 60점 이하의 경우는 F를 받고 100점이 넘는 경우는 X를 받게 된다. 점수는 0~100 사이지만 사용자가 실수로 그 외의 값을 입력할 수 있다. 이런 실수에도 프로그램이 종료되거나 오류를 일으키지 않도록 만들어야 하는데 비정상적 입력에도 정상적으로 작동하는 것을 프로그램의 강건성 이라고 한다. 항산 강건성을 염두에 두고 프로그램을 작성해야 한다.
3.3.1 if문
if 문의 구문형식은 다음과 같다.
if (논리식) 명령문;
논리식은 항상 논리값인 참 또는 거짓을 가지며 괄호로 둘러싸인다.
다음 예제를 통해 if문의 사용법을 확인하자
#include <stdio.h>
int main()
{
int num1;
int num2;
int bigger;
printf("please enter 2 integers\n");
scanf ("%d %d",&num1, &num2);
bigger = num1;
if( num1 < num2)
{
bigger = num2;
}
printf("the large number is %d\n",bigger);
return 0;
}
2개의 정수를 입력 받아서 큰 수를 구하는 프로그램이다.
입력 받은 후 bigger 라는 변수에 num1 을 넣고, if문으로 num2 가 num1 보다 크다는 것을 논리식으로 표현하여, 논리식이 참이면 num2를 bigger 에 넣는 것이다. 참이 아니면 bigger 에 num1 이 들어 있으므로 두개의 정수중에 큰수를 구할 수 있다.
3.3.2 if , else 문의 들여쓰기
다중 if 문에서 if와 else의 짝은 else로부터 가장 가까이 위치하는 if 가 else 의 짝이 된다.
다음의 코드를 보도록 하자
if( num1< num2)
if (num3 < num2) bigger = num2;
else bigger = num3;
if( num1< num2)
if (num3 < num2) bigger = num2;
else bigger = num3;
예제에서는 들여쓰기가 다르기 때문에 다른 의 미를 가진거 처럼 보이지만 실행 결과는 같다. 다중 if문에서 else의 짝은 가장 가까이 위치하는 if이므로 else는 두 번째 if의 짝이다. 두 예제 중 위의 들여쓰기가 맞는 것이다.
들여쓰기는 주석처럼 프로그램의 내용과는 상관 없지만, 프로그램의 이해력을 높이는데 대단히 중요함으로 반드시 습관화 해야 한다.