89 – 기본 입출력 함수

우선은 표준 입출력 장치를 통한 입출력에 대해 정리를 할 것이다. 표준 입출력에서 말하는 표준 입력은 키보드, 표준 출력은 모니터를 의미한다.

표준 입력을 통해 한 문자를 입력하고 출력하는 함수는 다음과 같다.

  • 함수이름 | 기능
  • getchar | 표준 입력을 통해 한 문자를 입력받는다.
  • putchar | 표준 출력을 통해 한 문자를 출력한다.

문자 하나를 입력받는 작업을 계속 이어서 진행하면 문자열을 입력받는 작업으로도 진행할 수 있다. 이를 통한 예제는 다음과 같은데, 입력받은 대문자를 소문자로 전환하는 프로그램이다. 마지막 입력으로 엔터를 치면 EOF로 인식해서 입력이 끝나는 것이다.

스크린샷 2017-05-06 오후 4.05.07스크린샷 2017-05-06 오후 4.05.46

이제 여러 문자를 입력받아 문자열 단위로 입력받는 함수를 알아보겠다.

  • 함수 이름 | 기능
  • gets | 표준 입력을 통해 한 행의 문자열을 입력받는다.
  • puts | 표준 출력에 한 행의 문자열을 출력하고 개행한다.

입력 받은 내용을 그대로 출력하는 예제를 만들어서 진행해 보았다. gets에서 입력받은 경우, 끝이라는 것을 입력받으면 NULL을 반환한다. 그래서 마지막에 입력받은 부분이 NULL인지 아닌지를 체크하는 것이다.

스크린샷 2017-05-06 오후 4.06.02스크린샷 2017-05-06 오후 4.06.34

이 다음으로 살펴볼 함수는 우리한테 익숙한 printf와 scanf이다. 이 함수들을 이용하면 ‘서식’이 지정된 문자열을 입력 및 출력할 수 있게 된다. 서식화된 입력을 통해서는 변수에 지정할 지정 타입을 서식화 할 수 있는 것이 되고, 서식화된 출력을 통해서는 서식화된 구조 및 서식에 맞는 변수 출력을 서식화하여 출력할 수 있게 된다. 서식으로 변환되는 데 이용되는 문자열을 서식 문자열이라고 하고,  흔히 %d, %s, %f 등으로 도중 도중에 사용하던 것이다.

우선은 scanf 함수에 대해서 살펴보도록 하겠다.

  • 함수 이름 | 기능
  • scanf | 표준 입력을 통해 서식을 갖춘 데이터를 입력받는다.

그리고 scanf의 변환 문자열은 다음과 같다.

  • 변환 문자열 | 의미
  • %o | 8진수 정수 형식으로 입력
  • %d | 10진수 정수 형식으로 입력
  • %ld | long형 10진 정수 형식으로 입력
  • %x | 16진수 정수 형식으로 입력
  • %f | float형 형식으로 입력
  • %lf | double형 형식으로 입력
  • %c | 문자 형식으로 입력
  • %s | 문자열 형식으로 입력

다음으로 우리에게 친숙한 printf형을 살펴보겠다.

  • 함수 이름 | 기능
  • printf | 데이터를 서식화하여 표준 출력으로 출력한다.

그리고 printf의 변환 문자열은 다음과 같다.

  • 변환 문자열 | 의미
  • %o | 8진수 정수 형식으로 출력
  • %d | 10진수 정수 형식으로 출력
  • %ld | long형 10진수 정수 형식으로 출력
  • %x | 16진수 정수 형식으로 출력
  • %u | 부호 없는 10진 정수 형식으로 출력
  • %f | 소수점 형식으로 출력
  • %e %E | 지수 형식으로 출력
  • %g %G | %e, %f 중 짧은 쪽, 소수점에 이어지는 0은 생략
  • %c |  문자 형식으로 출력
  • %s | 문자열 형식으로 출력

printf의 출력 변환 문자열에는 출력하는 폭, 자릿수 등을 지정할 수 있다. 옵션의 지정 형식은 다음과 같다.

%폭 자릿수 변환문자

예를 들어, 숫자 123을 출력할 때, %d, %5d, %-5d에 따라서 출력이 달라지게 된다.

%d: [123]
%5d: [  123]
%-5d: [123  ]

이런 식으로 총 자릿수를 5로 지정해서 5자리의 출력 공간에 123을 출력하는 것이 두 번째 예시이고, 세 번째 예시처럼 마이너스 부호를 붙이면 뒤로 5개의 자리를 만들기 때문에 뒤에 공백이 생기게 된다.

예시는 이전까지 하면서도 많이 했지만 예의상 작성해본다.

스크린샷 2017-05-06 오후 4.06.58스크린샷 2017-05-06 오후 4.07.30

마지막으로 메모리를 통해 입출력을 진행하는 함수를 알아보도록 하겠다. sscanf와 sprintf 함수인데,  이 함수들은 키보드를 통한 표준 입출력이 아니라 메모리 영역을 통해서 데이터를 입력받고 출력하는 함수들이다. 메모리 자체에는 그냥 값이 들어있지만 이 두 함수를 이용하면 서식화된 메모리 데이터의 입출력이 가능하다.

함수 이름 | 기능

sscanf | 메모리 영역을 통해 서식을 갖춘 데이터를 입력받는다.

sprintf | 데이터를 서식화하여 메모리 영역으로 출력한다.

이것도 예시를 보자. 데이터를 10진수와 소수점 형태로 메모리에 저장한 후, 이를 8진수와 지수 형태로 읽여들이는 예시 프로그램을 작성하였다.

스크린샷 2017-05-06 오후 4.08.07스크린샷 2017-05-06 오후 4.08.17

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.