89 – 기본 입출력 함수

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

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

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

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

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

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

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

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

이 다음으로 살펴볼 함수는 우리한테 익숙한 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개의 자리를 만들기 때문에 뒤에 공백이 생기게 된다.

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

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

함수 이름 | 기능

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

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

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

답글 남기기

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

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