12장 전처리기와 라이브러리 함수

JongseokLee·2021년 7월 31일
0

C 프로그래밍 기초

목록 보기
12/15
post-thumbnail

12장 전처리기와 라이브러리 함수

1. 전처리기 이해하기

1) 전처리기

  • 소스 파일을 컴파일러에게 전달하기 전에 일련의 작업 과정을 수행
  • 전처리기 작업
    • 헤더(header) 파일을 소스 파일에 삽입
    • 매크로(macro) 치환 및 적용
  • 전처리기 선언 방법
    • 샵(#)으로 시작하여 선언
    • 문장 마지막에 세미콜론(;) 사용하지 않음

2) 헤더(header) 파일

  • 함수, 상수 등이 정의되어 있는 파일
  • 확장자 : *.h
  • 종류
    • C언어 표준 헤더 파일
    • 사용자 정의 헤더 파일

3) 매크로(macro)

  • 반복적으로 수행하는 단어 또는 문장에 별명을 붙이는 것
  • 연산을 수행하지 않음
  • 단순 치환 수행
  • #define문을 이용

4) 매크로 함수

  • 일반 함수와 같이 매개 변수와 함수 본체를 가짐
  • 함수 이름은 일반적으로 소문자 사용
  • 매개 변수는 자료형을 지정하지 않음
  • 연산을 수행하지 않으며, 단순 치환 수행

5) 조건 컴파일

  • 매크로 정의 유무 또는 조건식에 따라 명령문을 선택하여 컴파일하는 것
  • 전처리기가 해석하여 처리

2. 문자열 라이브러리 함수 활용하기

1) <stdio.h> 헤더 파일 - 표준 입출력 함수
2) <ctype.h> 헤더 파일 - 문자 검사 및 변환 함수
3) <stdlib.h> 헤더 파일 - 문자열 수치 변환
4) <string.h> 헤더 파일

  • 문자열의 문자 개수
  • 문자열의 비교
  • 문자열의 연결
  • 문자 또는 문자열 검색

3. 수학 관련 라이브러리 함수 활용하기

1) <stdlib.h> 헤더 파일 - 난수 발생 함수
2) <math.h> 헤더 파일 - 수학 함수


4. 단원 실습

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
프로그램을 종료합니다.
profile
DataEngineer Lee.

0개의 댓글