본문 바로가기

C Langauage

Chapter 3. 자료의 입출력

Chapter 3. 자료의 입출력 

1. 스트림과 자료전송

 - 스트림

  · 연속된 데이터 바이트의 흐름

  · 표준 스트림

  ◦ stdin : 표준 입력 스트림으로 입력장치로는 키보드가 있다.

  ◦ stdout : 표준 출력 스트림으로 출력장치로는 모니터가 있다.

  ◦ stderr : 표준 에러 스트림으로 출력장치로는 모니터가 있다.

 - 버퍼

  · 임시기억장소(임시저장공간) 

  · 입력버퍼 : stdin

  · 출력버퍼 : stdout

  · 변수가 아닌 일시적으로 저장될 데이터들은 버퍼에 저장된다.

  · 입출력 데이터는 한 번에 하나씩 전송 되는 것이 아니라 버퍼에 저장되었다가 일정 순간에 입출력 된다.

  · 버퍼는 임시저장장소로 데이터를 비우기 위해서는 fflush명령어를 써줘야한다.

  ◦ fflush(stdout); : 출력버퍼를 비워주는 함수

  ◦ fflush(stdin); : 입력버퍼 비워주는 함수

 

2. 출력 함수와 입력함수

 - 출력함수와 입력함수를 사용하기 위해서는 stdio.h(standard input output stream)라는 표준 입출력 스트림을 소스 파일내에 포함해야한다.

 - 그렇기 때문에 C언어로 프로그램을 만들때는 #include<stdio.h>를 써줘 stdio.h를 포함해줘야 한다.

 - printf

  int printf(const char *format [, argument]...);

  형식문자열 구조

  %[flags] [width] [.precision ] [{h | l | L}]type

  · 문자열(const char *format)을 출력장치에 출력해주는 함수

  · 출력하고자 하는 내용은 문자열이기 때문에 큰따옴표(" ")안에 입력한다.

  · 문자열을 입력할 때 특수 문자를 입력할 때는 특수 문자(Escape Sequence)서식 문자(Formatted Sequence)를 입력해야 한다.

  · 특수 문자(Escape Sequence)

  ◦ 특수 문자는 \(백슬러시)또는 \로 시작된다.

문자

기능

\n

 다음줄로 이동(New Line)

\r

 줄의 처음으로 이동(Carriage return)

\b

 왼쪽으로 커서 이동(backspace)

\\

 백 슬러시(\) 문자 출력

\t

 탭 간격만큼 이동

\a

 내부(메인보드) 스피커를 통해 경고음 출력

\0

 널(NULL) 문자

\"

 큰 따옴표(") 출력

    ※ 우리가 평소에 사용하는 Enter 같은 경우에는 \n과 \r을 동시에 사용하는 것과 같다.

  · 서식 문자(Formatted Sequence)

  ◦ 서식 문자는 %(퍼센트)로 시작된다.

  ◦ 서식 문자가 들어갈 시 위에 인자(argument)가 필요하다. 

  ◦ 서식문자는 각각의 필드별로 옵션을 지정(옵션지정자)할 수 있다. 

  ◦ type 필드(field)

   ▹ 출력하는 값의 형식을 지정 

   ▹ type 필드앞에는 h, l, L을 추가로 지정할 수있다. 

     h : short형 출력

    l : long 출력

     L : long double형 출력  

문자

기능

문자

기능

%c

 단일 문자

%x

 부호 없는 16진 정수, 소문자 사용

%d

 부호 있는 10진 정수

%X

 부호 없는 16진 정수, 대문자 사용

%i

 부호 있는 10진 정수, %d와 같다

%e

 e 표기법에 의한 실수

%f

 부호 있는 10진 실수

%E

 E 표기법에 의한 실수

%s

 문자열

%g

 값에 따라서 %f,%e 둘 중 하나를 선택

%o

 부호 없는 8진 정수

%G

 값에 따라서 %f,%E 둘 중 하나를 선택

%u

 부호 없는 10진 정수

%p

 포인터의 번지(값의 주소값) 출력

%%

 %기호 출력

 

 

   ◦ width 필드
    ▹ 출력하는 값의 폭(글자 수)을 지정
    ▹ 출력의 폭을 지정하는 경우에는 전체 폭의 오른쪽에 맞춰서 출력
    ▹ 실수를 출력하는 경우에는 소수점 이하 6자리를 기본적으로 출력 

사용예

의미

출력결과

 printf("%10d", 123);

 10진수(d)로 10글자(10) 출력

 ▯▯▯▯▯▯▯123

 printf("%10x", 123);

 16진수(x)로 10글자(10) 출력

 ▯▯▯▯▯▯▯▯7b

 printf("%10e", 12.3456);

 지수표기(e)로 10글자(10)출력

 1.234560e+001

 printf("%10f, 12.3456);

 소수표기(f)로 10글자(10)출력

 ▯12.345600

 printf("%10g, 12.3456);

 지수와 소수 중 간단한 것(g)으로 10글자(10) 출력

 ▯▯▯12.3456

 printf("%10p", "abc");

 16진수(p)로 주소 10글자(10) 출력

 ▯▯00426090

 printf("%10s", "abc");

 문자열(s) 10글자(10) 출력

 ▯▯▯▯▯▯▯abc

  ◦ precision 필드
   ▹ 출력하는 값의 정밀도 지정
   ▹ 출력할 숫자 개수를 지정
   ▹ 실수 출력에 정밀도 지정 시 소수점 이하 자리수의 개수를 의미

사용 예

의미

출력결과

 printf("%10.4d", 123);

 10진수(d)로 10글자(10) 숫자 4글자(.4) 출력

 ▯▯▯▯▯▯0123

 printf("%10.4x", 123);

 16진수(x)로 10글자(10) 숫자 4글자(.4) 출력

 ▯▯▯▯▯▯007b

 printf("%10.4e", 12.3456);

 지수표기(e)로 10글자(10)출력 소수점 4째 자리(.4) 출력

 1.2346e+001

 printf("%10.4f, 12.3456);

 소수표기(f)로 10글자(10)출력 소수점 4째 자리(.4) 출력

 ▯▯▯12.3456

 printf("%10.4g, 12.3456);

 지수와 소수 중 간단한 것(g)으로 10글자(10) .을 제외한 숫자 4개(.4) 출력

 ▯▯▯▯▯12.35

  ◦ flags 필드
   ▹ -, +, 0, 빈칸 #문자가 올 수 있다.

문자

의미

디폴트 값

사용예

출력결과

-

 전체 폭에 대해서 왼쪽으로 정렬

 오른쪽으로 정렬

 printf("%-10d",123);

 123▯▯▯▯▯▯

+

 부호 있는 값에 대해 +/-를 출력

 음수에 대해서만 -출력

 printf("%+10d",123);

 ▯▯▯▯▯▯ +123

0

 정수의 폭에 맞춰 0으로 채운다

 정수의 폭에 맞춰서 0으로 채운다

 printf("%010d",123);

 0000000123

빈칸

 부호 있는 값이 양수이면 빈칸을 앞에 붙여서 출력

 빈칸 출력하지 않는다.

 printf("% 10d",123);

 ▯▯▯▯▯▯▯ 123

#

 o,x,X와 함게 사용되면 0,0x,0X를 앞에 붙여서 출력

 출력하지 않는다.

 printf("%#x",123);

 ▯▯▯▯▯▯ 0x7b

 - scanf

  int scanf(const char *format [, argument]...); 

  형식문자열 구조 

  % [*] [width] [{h | l | L}]type

  · 서식(*format)에 맞게 버퍼에서 데이터를 가져오는 함수 

  · 버퍼에서 데이터를 가져올 때 데이터가 없을시 커보드로부터 버퍼에 입력받아 저장한 후 가져온다. 

  · 서식에 서식 문자(formatted Sequence)가 변수를 필요로 할 때는 콤마(,) 뒤에 변수명을 입력해준다. 

  · 두개 이상의 변수 값을 입력받을 시에는 서식 문자 사이의 문자가 입력의 구분기호가 된다. 

    ※ 입력함수를 두개 이상 연달아 쓸 때 버퍼를 비워주지 않으면 두 입력함수가 같은 값이 들어가기 때문에 fflush함수를 써줘야 한다.

  · type 필드
  ◦ 입력받을 값의 유형을 지정
  ◦ printf의 type 필드와 유사
  ◦ 문자 : %c
  ◦ 정수
 

   ▹ 10진수 : %d, %i, %u

   ▹ 8진수 : %o 

   ▹ 16진수 : %x, %X
  ◦ 실수 : %f, %e, %E, %g, %G
  ◦ 문자열 : %s
  ◦ double형 변수 : %lf

  ◦ long double형 변수 : %Lf
  · width 필드

 int a, b;

 scanf("%2d%3d", &a,&b);

 → 10진수 2자리를 a로 입력받고 3자리를 b로 입력받는다.

  ◦ 입력받을 값의 폭을 지정
  ◦   * : 현재 입력을 무시
 

사용 예

의미

처리결과

 scanf("%d %*d %d", &a, &b);

 10 20 30

 a에 10, b에 30이 입력

 scanf("%2d%3d", &a, &b);

 12345

 a에 12.b에 345가 입력

 scanf("%x %x", &a, &b);

 12 abc 또는0x12 0xabc

 a에 0x12, b에 0xabc가 입력

 scanf("%f, %lf", &x, &y);

 12.34 56.78

 x에 12.34, y에 56.78이 입력

 scanf("%s %s", s1, s2);

 abc def

 s1에 abc, s2에 def가 입력

 

 


'C Langauage' 카테고리의 다른 글

Chapter 6. 배열(Array)과 문자열(String)  (0) 2015.08.05
Chapter 5. 제어문  (0) 2015.08.05
Chapter 4. 연산자(Operator)  (0) 2015.08.05
Chapter 2. 데이터형, 변수, 상수  (0) 2015.08.05
Chapter 1. C언어 입문  (0) 2015.08.05