관리 메뉴

드럼치는 프로그래머

[C] Swich문과 If 문 비교 본문

★─Programing/☆─C | C++

[C] Swich문과 If 문 비교

드럼치는한동이 2007. 10. 21. 23:31

if 문을 쓰는 경우는 조건안에 연산식등을 넣을 수 있어
성적처럼 어떤 범위를 제한하고 조건연산을 하기에 쉽습니다.

switch 문은 실제 분기가 숫자로 일치하는 경우에 분기합니다.
그렇기때문에 일치하지 않을 경우 처리를 위해 default 분기가 필요합니다.

switch 문은 state machine 에서 많이 사용합니다.
주로 자판기 알고리즘을 예로 많이 드는데

동전을 넣기 전 : 동전대기
동전을 넣는중 : 실제넣어진금액 계산과 음료수가격비교
버튼입력 대기중: 버튼 및 동전 대기
음료수 나오기 : 잔돈계산과 음료수 나오기
종료 : 다시 대기상태로...

대충 이런식으로 각 상태에서 머물면서 다른 상태로 이동하는
시스템을 말합니다. 각 상태를 좀더 세분화할 수는 있지만
다른 상태는 가질 수 없습니다. 각 상태에다 고유번호를 매겨놓을 경우
그 중간값은 가질수 없다는 이야기입니다.

이런경우
각 상태에서 머무르면서 입력 등을 기다리는 과정은
switch 문으로 작성하고
돈계산이라든지, 다른 스테이트로 넘어가는 조건 등을 연산하는 과정에서는
if 문으로 작성합니다.

동전의 경우도 51원짜리나 150원짜리 동전이 없기때문에
switch 로 동전의 가지수를 한정할수있습니다.

왜 그렇게 하느냐하면 직접 작성해보면 쉬울뿐더러
다른사람이 소스를 볼때 이해가 편하고
실제 일어나는 연산도 줄어들 수 있기 때문입니다.

대체로 if문은 true 또는 false(예 아니요)일 생황에서 많이 사용을 합니다.

예를 들어

if(sum>=60)
printf("합격입니다");
else
printf("불합격입니다");

하지만 if문도 여러조건의 분기가 가능합니다.

if(avg >=90)
printf("당신의 학점은 A");
else if(avg >=80)
printf("당신의 학점은 B");
else if(avg >=70)
printf("당신의 학점은 C");
else if(avg >=60)
printf("당신의 학점은 D");
else
printf("당신의 학점은 F");

이런식으로 여러 조건도 분기가 가능합니다.
근데 이럴 경우 switch 문을 쓰면 훨씬 간단해지죠

switch ((avg>=90) + (avg>=80) + (avg>=70) + (avg>=60))
{
case 4 :
printf("당신의 학점은 A");
break;
case 3 :
printf("당신의 학점은 B");
break;
case 2 :
printf("당신의 학점은 C");
break;
case 1 :
printf("당신의 학점은 D");
break;
case 0 :
printf("당신의 학점은 F");
break;
}

이런식으로도 가능하죠...

어쩔땐 if문 여러번 분기가 편하고 어쩔때는 switch-case문이 편하고 그래요

골라 쓰시면 되요..하는일 100% 똑깥음~

Comments