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 ... )는 사용할 수 있다.
'Computer Engineering' 카테고리의 다른 글
KLDPWiki: Emacs Change Fonts (Emacs 글꼴 바꾸기) (0) | 2012.01.25 |
---|---|
[C] 0x07 조건문(Switch) (0) | 2012.01.13 |
[C] 0x05 연산자(Operator) (0) | 2012.01.11 |
[C] 0x03 DataType(자료형) (0) | 2012.01.09 |
[C] 0x02 컴파일러(Compiler) , 링커(Linker), 이스케이프 문자열(Escape Sequence) ... (0) | 2012.01.06 |