24
1 04 전전전전 전전전 2007 1 전전

04 전처리와 입출력

Embed Size (px)

DESCRIPTION

2007 1 학기. 04 전처리와 입출력. 헤더파일. 텍스트 파일 헤더파일 (header file) 은 확장자가 * .h 로 전처리기 지시자인 #include, #define 등과 자료형의 재정의 , 함수의 원형 (prototype) 을 포함하는 텍스트 파일 다음은 함수 main() 위에 항상 끼워 넣은 헤더 파일 stdio.h 의 일부 위 헤더파일은 시스템 헤더파일로 개발도구에서 제공하는 헤더파일  . … typedef unsigned int size_t; … - PowerPoint PPT Presentation

Citation preview

Page 1: 04  전처리와 입출력

1

04 전처리와 입출력

2007 1 학기

Page 2: 04  전처리와 입출력

Perfect C2

헤더파일 텍스트 파일

헤더파일 (header file) 은 확장자가 *.h 로 • 전처리기 지시자인 #include, #define 등과 자료형의 재정의 , 함수의 원형

(prototype) 을 포함하는 텍스트 파일 다음은 함수 main() 위에 항상 끼워 넣은 헤더 파일 stdio.h 의 일부

위 헤더파일은 시스템 헤더파일로 개발도구에서 제공하는 헤더파일

…typedef unsigned int size_t;…#define EOF (-1)…_CRTIMP int __cdecl printf(const char *, ...);…#define getchar() getc(stdin)#define putchar(_c) putc((_c),stdout)…

Page 3: 04  전처리와 입출력

Perfect C3

시스템 , 사용자 헤더파일 사용자 헤더 파일

사용자가 직접 작성한 헤더파일은 지시자 #include 를 이용하는 경우

  헤더파일의 큰 따옴표는 헤더파일이 기술된 폴더와 시스템 인클루드

폴더를 차례로 검색 시스템 헤더 파일은 대부분 개발도구가 설치된 폴더에서 하부 [include]

라는 이름의 폴더에 존재 시스템 헤더 파일

#include <stdio.h>#include “myheader.h”

Page 4: 04  전처리와 입출력

Perfect C4

사용자 헤더파일 myheader.c 와 myheader.h 로 나누어 처리

헤더 파일 myheader.h 는 소스 myheader.c 와 동일한 폴더에 저장 Visual C++ 에서의 헤더 파일

Visual C++ 에서는 개발 도구 환경에서 사용자가 직접 만든 헤더 파일만을 구분할 수 있는 창을 제공

Page 5: 04  전처리와 입출력

Perfect C5

기호상수 정의 #define

전처리기 지시자인 #define 은 소스에서 지정된 기호상수를 정의된 치환문자열로 대체 ( 치환 ) 하는 역할 수행

장점 지시자 #define 은 시스템에 따라 변할 수 있는 상수를 한번에 수정할 수

있고 , 수정되는 한 부분만 검사하면 되므로 이식성과 신뢰성이 증대

예제 4-3

Page 6: 04  전처리와 입출력

Perfect C6

#define#include <stdio.h>#define PRTLINE printf(“\n”);int main(void){

PRTLINE // 전처리기가 printf(“\n”); 로 치환함return 0;

}-------------------------------------------------#define SQUARE2 2 * 2#define SQUARE3 3 * 3 ….printf(“%d, %d”, SQUARE2, SQUARE3);// 전처리가 printf(“%d, %d”, 2 * 2, 3 * 3); 로 치환

Page 7: 04  전처리와 입출력

Perfect C7

인자의 이용 인자가 있는 매크로의 치환

Page 8: 04  전처리와 입출력

Perfect C8

주의 사항 괄호의 이용

공백에 의한 오류

예제 4-4 : #define CUBE(x) ( (x) * (x) * (x) ) 예제 4-5 : #define PHI 3.14 #define ROUND(r) (2 * PHI * (r) )

Page 9: 04  전처리와 입출력

Perfect C9

자료형의 재정의 typedef

키워드 typedef 를 이용하여 이미 정해진 자료 유형을 다른 이름으로 재정의 typedef unsinged long u_long;

자료 재정의 필요성 터보 C++ 에서 자료 유형 int 는 저장공간의 크기가 2 바이트이나 비쥬얼 C++ 는 4

바이트 개발도구가 변하면 자료 유형이 맞지 않아 오류가 발생함 int 형이 2 바이트인 개발 환경에서는 typedef 문만 변경하면 나머지 프로그램

수정하지 않아도 됨으로 편리 ( 예 ) typedef long myint;

Page 10: 04  전처리와 입출력

Perfect C10

예제 소스 typedef.c

Page 11: 04  전처리와 입출력

Perfect C11

표준입력 함수 scanf()

간단한 정수의 입력 & 은 주소를 의미하는 연산자

Page 12: 04  전처리와 입출력

Perfect C12

변환 명세 함수 scanf() 에서

임의의 갯수의 입력을 받을 수 있고 , 이런 경우 적절히 변환 명세를 이용하여 입력 값을 지정

scanf(“%d %f”, &age, &weight);

Page 13: 04  전처리와 입출력

Perfect C13

예제 소스

Page 14: 04  전처리와 입출력

Perfect C14

예제 소스 mydata.c

키보드로부터 키 , 8 진수 , 16 진수 , 몸무게 , 혈액형을 입력 받아 저장 , 출력하는 프로그램

각각의 입력 값을 저장할 자료형을 고려하여 변수를 선언한 후 함수 scanf() 를 이용하여 입력 값을 저장

문자 입력 155 쪽 소스 24 라인을 주의

• 함수 scanf() 를 호출하는 인자가 “ \n%c”

만일 여러분이 무심코 24 라인을 scanf(“%c”) 로 코딩하였다면 프로그램 실행에서 원하는 결과가 나오지 않음

몸무게를 입력한 후 Enter 키를 누른 값이 \n 으로 입력되고 , 이 후 입력하는 문자가 변수 blood 에 저장되게 하기 위함

Page 15: 04  전처리와 입출력

Perfect C15

출력 함수 함수 printf()

모든 종류의 자료형을 출력하는 함수 제어문자열과 표현식을 이용하여 출력하는데 , 제어문자열 (control

string) 에는 출력하려는 표현식 값에 따라 변환명세 (conversion specification) 를 차례로 기술

• 변환명세는 변환문자열이라고도 표현 제어문자열 내부의 변환명세는 표현식의 수와 값의 종류에 따라

서로 순서대로 일치 ( scanf 의 변환 명세와 동일한 명세 사용 )

printf (“ … %d … %f …“, 정수표현식 , 실수표현식 );

Page 16: 04  전처리와 입출력

Perfect C16

정수 값의 필드 폭 출력하려는 정수 값의 필드 폭 (width) 지정

%d 사이에 폭을 나타내는 정수를 기술

Page 17: 04  전처리와 입출력

Perfect C17

실수의 필드 폭 부동소수형을 출력하는 경우

변환명세에서 필드 폭 (width) 을 지정하려면 %f 사이에 폭을 기술

Page 18: 04  전처리와 입출력

Perfect C18

출력 제어 문자의 이용 출력제어문자 (escape sequences)

탈출 기법을 이용한 문자를 함수 printf() 에서 제어문자열이나 표현식에서 이용이 가능

Page 19: 04  전처리와 입출력

Perfect C19

예제 소스 printescape.c

Page 20: 04  전처리와 입출력

Perfect C20

예제 소스 fieldwidth.c

다음과 같은 출력이 나오도록 함수 printf() 의 제어문자열과 변환명세를 고려하여 프로그램을 작성

Page 21: 04  전처리와 입출력

Perfect C21

문자 입출력 문자 하나

문자 하나를 입력하고 출력하기 위한 함수가 getchar() 와 putchar()

• 이 함수를 이용하려면 헤더 파일 stdio.h 파일을 첨가• 함수 getchar() 를 이용하여 문자를 하나 입력 받으려면 인자가 없는

getchar() 를 이용• 입력 받은 문자를 저장하려면 자료형 char 나 정수형으로 선언된

변수를 이용하여 저장

• 문자의 출력은 함수 putchar() 의 인자에 출력하려는 문자를 기술하여 출력

char c;c = getchar();

putchar(c);

Page 22: 04  전처리와 입출력

Perfect C22

이해점검 C 언어에서 헤더파일을 첨가하는 지시자는 (#include ) 이다 . 사용자가 직접 작성한 헤더파일은 지시자 #include 를 이용하는 경우 ,

( “” ) 를 이용하여 헤더파일을 기술한다 . 전처리기 지시자인 ( ) 은 소스에서 지정된 기호상수 (symbolic constant)

를 정의된 치환문자열로 대체한다 . 함수 printf() 에서 출력 값의 정렬은 기본적으로 ( 오른쪽 ) 정렬이다 . 함수 printf() 에서 출력 값의 정렬을 왼쪽으로 지정하려면 문자 ( - ) 를 %

다음에 기술하여 이용한다 . 표준 출력으로 함수 printf() 를 이용하듯이 , 표준 입력으로는 함수

( scanf() ) 를 이용한다 . 함수 scanf() 에서 표준입력으로 값을 입력 받아 변수에 저장하려면 일반

변수 앞에는 반드시 주소를 의미하는 문자 ( & ) 가 앞에 와야 한다 . 함수 scanf() 에서 double 자료형을 소수 형태로 입력 받으려면

변환명세를 (%lf ) 라 기술한다 . 문장 ( typedef ) 는 C 언어의 일반 문장으로 이미 사용되는 자료형을

새로운 자료형으로 정의할 수 있는 기능이다 . 문자 하나를 입력하는데 이용하는 함수는 ( getchar ) 이다 .

Page 23: 04  전처리와 입출력

Perfect C23

프로그래밍 실습

프로그램 목적 자료형 double 인 원의 반지름을 입력 받아 , 원의 둘레와 원의 면적을

구하는 프로그램을 작성

헤더 파일과 매크로를 작성 헤더파일 circle.h

• 원주율 3.14 를 PHI 정의• 매크로 CIRCUM(x) 은 인자 x 가 반지름인 원에서 원의 둘레를 구하는

매크로를 정의• 매크로 AREA(x) 는 인자 x 가 반지름인 원에서 원의 면적을 구하는 매크로를

정의

Page 24: 04  전처리와 입출력

24

노력 없이 이룰 수 있는 것 아무것도 없다 .