1) 전처리기
- 소스 파일을 컴파일러에게 전달하기 전에 일련의 작업 과정을 수행
- 전처리기 작업
- 헤더(header) 파일을 소스 파일에 삽입
- 매크로(macro) 치환 및 적용
- 전처리기 선언 방법
- 샵(#)으로 시작하여 선언
- 문장 마지막에 세미콜론(;) 사용하지 않음
2) 헤더(header) 파일
- 함수, 상수 등이 정의되어 있는 파일
- 확장자 : *.h
- 종류
- C언어 표준 헤더 파일
- 사용자 정의 헤더 파일
3) 매크로(macro)
- 반복적으로 수행하는 단어 또는 문장에 별명을 붙이는 것
- 연산을 수행하지 않음
- 단순 치환 수행
- #define문을 이용
4) 매크로 함수
- 일반 함수와 같이 매개 변수와 함수 본체를 가짐
- 함수 이름은 일반적으로 소문자 사용
- 매개 변수는 자료형을 지정하지 않음
- 연산을 수행하지 않으며, 단순 치환 수행
5) 조건 컴파일
- 매크로 정의 유무 또는 조건식에 따라 명령문을 선택하여 컴파일하는 것
- 전처리기가 해석하여 처리
1) <stdio.h> 헤더 파일 - 표준 입출력 함수
2) <ctype.h> 헤더 파일 - 문자 검사 및 변환 함수
3) <stdlib.h> 헤더 파일 - 문자열 수치 변환
4) <string.h> 헤더 파일
- 문자열의 문자 개수
- 문자열의 비교
- 문자열의 연결
- 문자 또는 문자열 검색
1) <stdlib.h> 헤더 파일 - 난수 발생 함수
2) <math.h> 헤더 파일 - 수학 함수
1) 1에서 45의 난수를 발생하여 로또 프로그램을 작성하시오.
2) 게임수를 입력받으시오.
3) 1게임당 6개의 숫자와 보너스 숫자 1개를 출력하시오.(숫자는 중복 불가)
#include <stdio.h>
#include <ctype.h>
#include "lotto.h"
#ifndef MAX
#define MAX 5 // 최대 게임수
#endif
#define game_count(count) count > MAX ? MAX : count // MAX보다 크면 MAX게임만 실행 메크로 함수
int main() {
int count = 0;
char game[3];
while (1) {
printf("게임수를 입력하세요(0:종료, 1~5) : ");
gets_s(game, sizeof(game));
if (isdigit(game[0])) { // 입력받은 값이 숫자인지 판단
count = atoi(game); // 문자를 숫자로 변환
if (count == 0) { // 0이면 종료
printf("프로그램을 종료합니다.\n");
break;
}
else { // 0이 아니면
if (count > MAX) { // 최대 게임수 보다 크게 입력하면
printf("%d 게임만 실행합니다.\n",MAX);
}
count = game_count(count); // // MAX보다 크면 MAX게임만 실행, 매크로 함수 호출
lotto(count); // 로또 번호 발생
}
}
else { // 숫자가 아니면 다시 입력
printf("숫자를 입력하세요~~\n");
}
}
}
<Result>
게임수를 입력하세요(0:종료, 1~5) : q
숫자를 입력하세요~~
게임수를 입력하세요(0:종료, 1~5) : 1
5 8 14 16 36 43 17
게임수를 입력하세요(0:종료, 1~5) : 2
2 7 19 26 27 30 6
10 15 16 19 32 35 17
게임수를 입력하세요(0:종료, 1~5) : 3
2 7 19 26 27 30 6
10 15 16 19 32 35 17
7 26 33 36 39 44 18
게임수를 입력하세요(0:종료, 1~5) : 4
10 17 22 27 37 40 13
4 13 18 34 40 42 14
4 6 12 15 26 34 24
32 34 35 38 40 42 8
게임수를 입력하세요(0:종료, 1~5) : 5
10 17 22 27 37 40 13
4 13 18 34 40 42 14
4 6 12 15 26 34 24
32 34 35 38 40 42 8
2 14 18 21 26 31 37
게임수를 입력하세요(0:종료, 1~5) : 6
5 게임만 실행합니다.
16 17 19 24 28 29 20
5 8 13 16 35 38 30
6 12 28 31 39 45 40
1 5 25 32 35 38 36
9 10 20 26 32 38 35
게임수를 입력하세요(0:종료, 1~5) : 0
프로그램을 종료합니다.