Team Curio

비주얼 노벨 한국어 패치 팀 큐리오

프로그래밍

8.c 언어강좌 (5)

연이v 2009. 7. 4. 12:33
반응형
SMALL

============================================================================
C 프로그래밍 5회
=============================================================================
이번 강의에서는 저번에 배우지 못한 입출력 함수인 getchar, putchar, getch, putch, getche등을 배워 보겠습니다.

1. 문자 입출력
C언어에는 printf, scanf말고도 문자 입출력 함수가 있습니다.
그것들에 대해 배워 보죠.

(1) getchar과 putchar 문자
입출력 함수인 getchar과 putchar함수를 배워보겠습니다.
이 함수들은 각각 한 문자를 입력, 출력하는 함수 입니다.
둘다 stdio.h에 정의되어 있죠.
getchar함수의 사용법은
[변수=]getchar();
이런 식으로 쓰면 됨니다.
여기서 변수는 입력 받은 문자가 들어갈 변수 입니다.
다음 putchar의 사용법은 간단한데
putchar(출력할문자);
이런 식으로 사용합니다.
예를 들자면
char a='A';
putchar('a');
putchar(a);
이런 식으로 쓰면 됨니다.

(2) getch와 putch그리고 getche
문자를 입출력하는 함수로는 getch,putch가 더 있는데, 이것들은 conio.h에 정의되어 있습니다.
getch함수는 한 문자를 입력받는 함수이고. putch는 한 문자를 출력하는 함수 입니다.
사용법은
변수=getch();
putch(출력할문자);
이렇게 쓰는데 아까 꺼랑 똑같습니다.
getchar과 getch의 다른 점은 getchar은 한 문자를 입력한 후 Enter키를 눌려야 하지만.
getch는 키보드에 문자 하나만 누르면 됨니다.
그리고 getch로 입력할 경우 문자가 화면에 출력되지 않습니다.
그런데 화면에 출력해야 할 경우가 생기는데, 그럴땐 getche함수를 쓰시면 됨니다.
사용법은 getch와 똑같습니다. 단 입력 받은 문자열 화면에 출력하죠.
그리고 putchar과 putch는 같다고 보시면 됨니다.

2. 문자열 입출력
문자열 입출력 함수인 gets와 puts에 대해 배워보죠.
이 함수는 각각 문자열을 입력받고 출력하는 함수 입니다.
사용법을 알아보면
gets(변수);
이렇게 사용하시면 됨니다.
여기서 변수는 문자열을 저장할 변수 입니다.
반드시 문자 배열이어야 하죠.
그리고 gets로 문자열을 입력받을때는 scanf와 다르게 공백이 있어도 상관 없습니다.
puts함수는
puts(출력할문자열);
이렇게 쓰시면 됨니다.
그리고 puts함수는 자동으로 문자열 끝에 '\n'를 집어 넣어 출력 한다는 것을 잊지 마세요.

printf("Example\n");
이렇게 할 것을 puts함수로 출력하면
puts("Example");
이렇게 하면 된다는 것 입니다..
이제 예제 하나 볼까요?
/* 파일 이름 : C5-1.C 프로그램 내용 : 입출력 함수 예제. */
void main()
{ int a; char b, str[100];
printf("Enter the Integer: ");
scanf("%d%c",&a);
printf("Enter the String: ");
gets(str);
printf("Enter the Character: ");
b=getche();
putchar('\n');
printf("\n----------------------------\n");
printf(" Integer: %d\n",a);
printf(" String: ");
puts(str);
printf(" Character: ");
putchar(b);
printf("\n----------------------------\n"); }
이정도는 분석하실수 있겠죠?
이것두 따로 설명은 하지 않겠습니다.
결과는 어떻게 나올까요??????
결과는
C:\>C5-1.EXE
Enter the Integer: 10
Enter the String: Example
String Enter the Character: a ---------------------------- Integer: 10
String: Example String Character: a ----------------------------
C:\>

3. 연산자
이제부터는 좀 쉬운 것들을 배우도록 하죠 어렵지는 않지만 매우 중요한 것이니 잘 들으시길 바랍니다. 이제부터 배울껀 연산자 입니다.
C언어는 키워드는 적어도 연산자 만큼은 그 그 어떤 언어보다도 많습니다.
그것이 C언어가 강력한 이유중 하나이죠.
C에서 연산자는 매우 중요하므로 잘 들으셔야 할 부분입니다.

(1) 기본 수학 연산자
우선 간단히 기본 수학 연산자를 하겠습니다.
C를 모르는 그 어떤 사람이라도 다 아는 것이니 머리 식힐겸 잘 읽어보세요.
기본 수학 연산에는 덧셈, 뺄셈, 곱셈, 나눗셈이 있습니다.
이에 따른 연산자는 다음과 같습니다.
-------------
+ 덧셈 - 뺄셈 * 곱셈 / 나눗셈 % 나머지
-------------
나머지 구하는 연산자 빼면 누구나 다 아는 것이죠? 특별히 설명할것두 없겠네요.
c=a+b; 이렇게 하면 c에 a와 b를 더해 넣는 것이고 c=a-b; 이렇게 하면 c에 a에서 b를 빼 넣는 것이고 더 이상의 설명은 필요 없겠죠? %는 사용법은 똑같으나 단지 나머지를 구하는 것 입니다.

(2) 단한 연산자
다음에는 단항 연산자를 알아보죠.
단항 연산자에는 +와 -가 있습니다.
단항 연산자는 변수나 상수앞에 붙여서 부호 표시를 하거나 부호를 바꿀때 쓰입니다.
예를 들어 a=-b; 이렇게 하면 a에는 b의 부호를 바꾼 값이 들어가겠죠?
만약 b가 -10이라면 a에는 10이 b가 10이라면 a에는 -10이 들어갑니다.
단항연산자중 +는 생략하면 기본으로 지정되므로 거의 쓰이지는 않습니다.

(3) 우선 순위
다음으로 연산자 우선순위를에 대해 알아보죠.
모든 연산자가 우선순위가 있다는 것은 알고 계시겠죠?
수학에서도 곱셈을 덧셈보다 먼저 하자나요.
그것은 곱셈의 우선순의가 높기 때문이죠.
아직 연산자를 많이 배우지는 않았지만 기본 수학 연산자의 우선순위를 알아보죠.
우선순위는 *, /, % 이 가장 높고 그 다음이 +, -입니다.
그리고 같은 순위에서는 왼쪽부터 계산이 됨니다.
또한 수식에 괄호가 있다면 괄호 안에 식을 먼져 계산하게 됨니다.

(4) 치환 연산자
우선 치환 연산자 입니다.
치환 연산자는 지금까지 계속 써 왔던 것 입니다.
치환 연산자는 바로 = 입니다.
이 연산자의 쓰임세는 아주 간단하죠? 모두들 알고계실 겁니다.
예를 들어 a=b; 이런 문장이 있다면 a에 b의 값을 넣으라는 것이 되겠죠?
이렇게 아주 간단합니다.
이렇게 지금까지 쓰던 문장을 단일 치환문 이라고 합니다.
그런데 C에서는 이런 단일 치환문 외에도 다중 치환문이 있습니다.
이것에 대해서도 자세히 알아보죠.
다중 치환문도 그리 어렵지 않은 것 입니다.
이 문장을 보세요. a=b=c=d=e=f=1; 이렇게 한 문자에 치환 연산자가 2개 이상 쓰인 것을 다중 치환문 이라고 합니다.
이 문장의 결과는 어떻게 될까요?
a,b,c,d,e,f모두에 1이 들어가겠죠?
치환 연산자는 +,-,*,/등의 연산자와는 다르게 오른쪽에서 왼쪽으로 연산을 수행합니다.
예를 들어.. e=a+b+c+d; 이건 a와 b를 더하고 그 값에 c를 더하는 식으로 왼쪽에서 오른쪽으로 연산을 수행하지만 a=b=c=d=e=f=1; 이건 f에 1을 넣고 e에 f의 값 즉 1을 넣고 하는 식으로 오른쪽에서 왼쪽으로 연산을 수행합니다.
위에 있는 다중 치한문 까지는 쉽게 이해가 되셨을 겁니다.
그럼 다음을 보세요.
a=10+(c=12-2);
이해가 빨리 되시나요?
어떻게 보면 잘못된 문장 같기도 하지만 이건 에러 없는 정확한 수식 입니다.
그럼 그 문장을 조금 바꿔 두 문장으로 해 보죠.
c=12-1; a=10+c; 이제 이해가 되시나요???
위의 수식을 줄여 쓴 것이 a=10+(c=12-2); 이거 입니다..
C에서는 이렇게 희귀한 수식도 인정합니다.
이제 예제 하나 볼까요??
/* 파일 이름 : C5-2.C 프로그램 내용 : 다중 치환문 예제 */
#include void main()
{ int a,b,c,d,e,f;
a=b=c=d=e=f=0;
b=10; c=20;
a=b+(d=c);
printf("%d %d %d %d %d %d\n",a,b,c,d,e,f); }
정말 간단한 소스죠.
조금 햇갈리실 것 이지만 잘 분석하면 결과는..
C:\>C5-2.EXE
30 10 20 20 0 0
C:\>
이렇게 나옴니다.

(5) 타입 캐스팅
이제 치환 연산자도 다 끝났습니다.
그런데 배울것이 하나 더 있는데 그걸 배우기 전에 다음과 같은 경우를 생각해 봅시다.
만약 int형과 unsigned long형태를 같이 계산하면 어떻게 될까요?
자료형의 형태가 다르니 잘못하면 잘못된 결과가 나올수도 있습니다.
이럴때는 데이터 형태을 일시적으로 변경시켜 주면 되는데 이렇게 일시적으로 데이터 형태를 바꿔주는 것을 타입캐스팅(Typecasting) 이라고 합니다.
C에서 타입캐스팅을 하려면 타입캐스팅 연산자를 사용해야 합니다.
그런데 타입캐스팅 연산자는 아주 간단합니다.
타입 형태 키워드들 즉 int, char, float등등이 타입캐스팅 연산자 기능까지 해 주기 때문이죠.
타입캐스팅 방법은 (타입)데이터 이렇게 하면 타입캐스팅이 됨니다.
여기서 타입은 바꿀 형태의 타입캐스팅 연산자 이고 데이터는 형태를 바꿀 데이터 인데 변수나 상수가 올수 있습니다.
또한 수식이 와도 상관 없습니다.
예를 들어보죠
int a=10;
unsigned long=b,c;
c=(unsigned long)a+b;
이 소스는 int형인 a를 unsigned long로 타입캐스팅 해서 unsigned long형태인 b와 더해 c에 넣는 것 입니다.
이제 이해가 되셨겠죠??

(6) 접미사
한가지 여기서 알고 넘어갈 것이 있는데 (사실 지금 설명할건 연산자와는 상관 없는 거지만....)
상수중 실재값은 정수의 경우 무조건 signed형태로 인식하고 int형태 범위 내에 값이면 int형으로 인식하며 그것을 벗어나면 long형으로 인식하게 됨니다.
그리고 소수의 경우는 무조건 double로 인식하죠 그러므로 상수는 타입 캐스팅이 많이 필요합니다.
만약 123이란 상수가 있다고 합시다.
이건 int형태 범위 내에 있으므로 signed int로 인식됨니다.
그런데 이걸 unsigned long로 타입캐스팅 하려면 (unsigned long)123 이렇게 하면 됨니다
하지만 이 방법보다 편한 방법이 있는데 123을 그냥 unsigned long형태로 인식시키는 것이죠.
그렇게 하기 위해선 접미사를 쓰면 됨니다. 접미사에는 L,F,U의 3가지가 있습니다.
그리고 대소문자 구별은 없습니다.
L은 long를, F는 float를, U는 unsigned를 의미 합니다.
그러므로 위에 것을 123UL 이렇게 서 주면 이 123은 unsigned long로 인식되어 타입 캐스팅이 필요가 없어 집니다.
이것으로 이번 강좌를 마치도록 하겠습니다.
다음 강좌에서는 남은 연산자들을 모두 배워보도록 하죠.
반응형

'프로그래밍' 카테고리의 다른 글

10.c 언어강좌 (7)  (0) 2009.07.09
9.c 언어강좌 (6)  (0) 2009.07.04
7.c 언어강좌 (4)  (0) 2009.07.04
6.c 언어강좌 (3)  (0) 2009.07.04
5.c 언어강좌 (2)  (1) 2009.07.03