본문 바로가기

Computer Engineering

[C] 0x06 조건문(if)

From Evernote:

[C] 0x06 조건문(if)

오늘은 C언어에서 많이 쓰이는 조건문에 대해서 알아보도록 합시당.
말 그대로 이해하면 편하십니다. 해당 '조건'에 맞는 경우 if문을 통해 제어를 할 수 있다.

if ( 조건문 ) {
 // 조건문이 참일 경우 이 부분에 있는 명령문을 실행 시킨다
}

else // 조건문과 다른 경우 ( if문 안에 들어간 조건을 제외하는 모든 경우)
=> else 다음에는 조건문을 넣을 수 없다.
위에서 이야기 했듯이 if문의 조건을 제외하는 모든 경우를 말하는 것이기 때문이다.

else 다음에 조건문을 사용하고 싶다면 
else if ( 조건문) => 이런 형태로 if 문과 매칭해서 사용해야 한다.
=> 그러므로 조건이 여러개인 경우 사용하면 Good~~!!

if ( 조건문 ) {
// 명령문;
}
=> 위의 if문에서 보면{}(중괄호)가 있다. 중괄호는 C언어에서 범위연산자로 사용된다.
그리고 비주얼 스튜디오 2010 을 사용하는 경우 Alt+F8 를 누르면 자동정렬이 된다.

그리고 우리는 항상 #include <stdio.h> 이 헤더파일을 사용했는데
오늘에는 잘 못 실행된 경우 바로 프로그램을 종료시켜주는 exit 를 사용해서 나갈 수 있다.

아래의 예제소스를 보고 알아봅시다.

/************************************
입력받은 문자가 대문자라면 -> 소문자로 변환하여 출력
입력받은 문자가 소문자라면 -> 대문자로 변환하여 출력
대문자도 소문자도 아니라면 -> 오류 메시지 출력
*************************************/

#include <stdio.h>
#include <stdlib.h>
int main()
{
  char input;
  printf("대문자 또는 소문자를 입력해주세요. : [   ]\b\b\b");
  scanf("%c", &input);

  if( input>='A' && input <='Z')
    {
      input = input+32;
    }
  else if ( input>='a' && input <='z')
    {
      input = input - 32;
    }
  else 
    {
      printf("Error~~!!소문자/대문자만 입력하라구~~\n");
      exit(0);
// 소문자/대문자를 입력하지 않았다면... 프로그램을 종료시킨다.
    }
printf("변환된 문자는 [%c] 입니다.\n",input);

  return 0;
}

잠깐 exit(0); 를 조금 더 살펴보면
               |
              여기에 인자값으로 0 이 들어가 있다. 0인 경우에는 '정상 종료'를 알려주는 것이다.
              0이외의 다른 '정수' 는 비정상종료를 나타낸다.   ==> Program의 상태를 알려주는 것이다.

여러분이 알고 있는 Windows xp, 7 , Mac , Linux 등의 OS(운영체제)가 프로그램을 구동시킨다.

그리고 추가 Tip 위의 소스를 보면   char input;    // 이렇게 문자형(char) 로 변수를 선언했다.

그런데 뒤에 나오는 if문을 살펴보면
  if( input>='A' && input <='Z')
    {
      input = input+32;
    }

문자형 input 에 + 32 ? 갑자기 이게 무엇이지 라고 생각할 수 있다.
조금만 생각하면 간단한 것!! 컴퓨터는 0 과 1로 모든것을 표현한다. 

즉 우리에게 문자형(char)로 보이는 data 도 실제로는 0 과 1로 이루어진 것이다.
이것을  아스키 문자표 를 통해서 확인을 할 수 있다.  

우리가 볼 수 있는 문자들은 모두 아스키 코드에서 출력가능한 문자표에 있는 문자들이다.

                    A     ..........     Z     .....     a     .............. z
ASCII          65                  90             97                  122

알파벳(대문자/소문자)는 ASCII 코드표상에서 위와 같은 값을 갖는다.

예제로 들었던 소스에서 A -> a 로 출력을 해주려면 아스키코드표의 차이값이 97 - 65 = 32 가 되는 것을 확인할 수 있다.
그래서 input = input + 32 ;     // 이렇게 명령문 사용한것이다. a -> A 는 응용하면 금방확인 할 수 있다.

= IF 문의 종류 =

다중 if 문 : 모든 조건을 검사한다. (1->2->3->4->5)
ex) 여러 선물 상자에서 자신의 선물을 찾는 것이다.

 1     if(score >= 90 && score <= 100)      grade = 'A';
2     if(score >= 80 && score< 90)           grade = 'B';
3     if(score >= 70 && score < 80)          grade = 'C';
 4     if(score >= 60 && score < 70)          grade = 'D';
5     if(score >= 0 && score < 60)            grade = 'F';
printf("당신의 등급은 : %c입니다.\n",grade);

else if 문 : 여러 조건 중 1개만 검사를 한다. ( 1 || 2 || 3 || 4 || 5 )
ex) 칸막이로 구분이 된 하나의 선물상자 중에서 자신의 선물을 찾는 것이다.

1     if(score >= 90 && score <= 100)    grade = 'A';
2     else if(score >= 80 && score < 90) grade = 'B';
3     else if(score >= 70 && score < 80) grade = 'C';
4     else if(score >= 60 && score < 70) grade = 'D';
5     else if(score >= 0 && score < 60)  grade = 'F';
printf("당신의 등급은 : %c입니다.\n",grade);

중첩 if 문 : 조건1을 만족해야 다음 조건문으로 넘어간다.

if (조건_1) {
     if ( 조건_2 ) {
     }
}

**참고** : 
              puts("Jack2");          
              printf("Jack2\n")
              => 둘 다 출력함수로 같은 결과가 출력이 된다.
              차이점이라고 하면 puts는 \n을 적지 않아도 자동줄바꿈이 된다.
              그리고 printf 와 다르게 puts에는 변환문자(%d, %f .. ) 를 사용할 수 없다.
              printf 와 마찬가지로 제어문자( \n, \t, \b ... )는 사용할 수 있다.

Posted via email from zzackzack2's Space