자료출처 : 핵심 길잡이 C 프로그래밍 언어
도서출판 : 성안당
C 언어는 다른 언어들과는 달리 언어의 설계상 입출력 명령문이 없으며, 대신 입출
력을 담당하는 라이브러리 함수 ( library function ) 를 이용하여 입출력 기능을 제공하고
있다. 이것은 입출력 부분을 분리함으로써 C 언어의 본래 목적인 호환성 및 이식성을
향상시키기 위해서이다.
표준 입 . 출력을 수행하기 위해 필요한 입출력 함수들이 표준 C 라이브러리에 정의
되어 있다. 필요한 표준 입출력 함수를 사용하기 위해서는 반드시 # include < stdio.h >
와 같이 표준 입출력 함수를 포함시킨 후 사용하여야 한다.
그러나 시스템에 따라 이것이 자동적으로 이루어지는 경우도 있다. 여기서 , 표준 입
력 ( standard input ) 이란 키보드 ( keyboard ) 로 프로그램 몇 데이터를 입력하는 것을 의
미하며 , 표준 출력 ( standard output ) 이란 컴퓨터 내부에서 실행된 프로그램의 결과를
단말장치화면 ( CRT ) 에 나타내는 것을 의미한다.
이 장에서는 C 언어에서 데이터를 입 . 출력하고자 할 때 사용하는 기본적인 표준 입
출력 함수들의 기능과 사용 방법에 대해서 살펴보기로 한다.
printf ( ) 는 프로그램이 실행된 후 출력 결과를 적절한 형식을 지정하여 화면에 나
타내 줄 때 사용하는 함수이다. 여기서 printf 는 " print formatted " 혹은 " formatted
print - out " , " print under format " 의 약칭이다.
printf ( ) 함수의 일반 형식은 다음과 같다.
|
printf ( " 형식 지정 제어문자열 , 매개변수들 " ) ; |
형식 지정 제어문자열 ( format - string ) 은 실제로 출력될 문자열과 출력 형태를 나타
내는 변환 문자로 이루어져 있다. 출력하고자 하는 결과를 printf ( ) 함수의 이중 인용
부호 ( " " ) 내에 적절한 형식으로 나타내기 위해서 각 매개변수에 1 : 1 로 대응되는 출력
형식 지정 변환 문자를 사용해야 한다. 매개변수들은 출력할 데이터 즉 상수 , 변수 , 식
등으로 이들은 각각 콤마 ( comma : , ) 로 구분된다. 경우에 따라 매개변수들은 생략될
수도 있다.
[ 표 4 - 1 ] 은 printf ( ) 함수에 이용되는 출력 형식 지정을 위한 변환 문자들의 종류와
기능을 나타낸다.
[ 표 4 - 1 ] 변환 문자
변환 문자 | 의 미 |
%d | 부호 있는 10진 정수로 출력한다. |
%u | 부호 없는 10진 정수로 변환하여 출력한다. |
%o | 부호 없는 8진 정수로 변환하여 출력한다. |
%x |
부호 없는 16진 정수로 변환하여 출력 ( 소문자 a ~ f 를 사용 ) 한다. |
%e %E | 지수 형태의 실수 ( m.nnnnnExx ) 로 출력한다. |
%f | 10진 형태의 실수 ( m.nnnnn )로 출력한다. |
%g %G | %e 또는 %f 중 출력되는 길이가 짧은 쪽을 선택해서 출력한다. 이때 유 효하지 않은 0 출력되지 않는다. |
%c | 한 개의 문자를 출력한다. |
%s | 문자열 즉 널문자 ( null character : \0 ) 가 나타날 때까지 출력한다. |
%lo | long 형 8 진수로 출력한다. |
%lx | long 횽 16 진수로 출력한다. |
%% | % 문자를 출력한다. |
또한 변환 문자만으로는 원하는 형태로 출력하기가 어렵다. 예를 들어, 실수의 경우
소수점 이하 몇째 자리까지 출력할 것인가를 조정할 수 있어야 한다. 그러나 변환 문자
만으로는 시스템이 정해 준 형태로만 출력된다. 이와 같이 % 와 변환 기호 사이에 출력
조정자 ( modifier ) 를 사용하여 출력 형태를 조정할 수 있다. 이들의 종류와 기능은
[ 표 4 - 2 ] 와 같다.
형식 |
% - w . nl [ 변환문자 ] |
조정자 | 기 능 |
- ( minus sign ) | 출력 필드 폭 ( field width )의 왼쪽에 맞추어 출력하고, 오른쪽은 공백 ( blank ) 으로 채운다. |
w ( field width ) | 출력 필드 폭을 나타낸다. 만일, 필드 폭이 출력 값의 자리수보다 적으면 출력 값의 자리수만큼 증가된다. 단, 필드 폭을 나타내는 숫자 앞에0 ( zero ) 가 있으면 공백 대신 0 로 채운다. |
n ( precision ) | 실수형 데이터에 대하여 소수점 이하 몇째 자리까지 출력할 것인가를나타내며, 바로 밑의 자리수에서 반올림이 이루어진다.문자열의 경우에는 최대 몇 개의 문자를 출력할 것인가를 나타낸다. |
1 | 출력 대상을 long int 로 간주하여 출력한다. 단, d, o, u, x, 변환 문자에만 적용할 수 있다. |
|
|
이 때 Visual Studio 에서 실행하면 1의 결과는 32770 이고 2의 결과는 4294967096
으로 출력된다.
다음 프로그램의 출력 결과를 나타내시오 ( 실수형 데이터 출력 ) ▶ 프로그램 # include < stdio.h > void main ( void )
} ▶ 실행 결과
|
다음 프로그램이 출력 결과를 나타내시오 ( 문자열 데이터 출력 ) ▶ 프로그램 # include < stdio.h > # define STR " Turbo C Programming " void main ( void )
} ▶ 실행 결과
|
scanf ( ) 함수는 키보드를 통해 데이터를 입력받는 함수로 숫자, 문자, 문자열 등을
지정된 서식에 따라 입력받아 매개변수에 저장한다. 또한 scanf ( ) 가 데이터를 읽어들
일 때 탭 ( tab ) 과 공백 ( blank ) , 개행 ( newline ) 문자 등에 의해 데이터가 구분된다.
scanf 는 " scan formatted " 혹은 " scan under format " 의 약자이며 일반 형식은 다
음과 같다.
형식 |
scanf ( " 형식 지정 제어문자열 " , 매개변수들 ) ; |
형식 지정 제어문자열 ( format - string ) 은 입력 장치인 키보드로부터의 입력 형식을
의미하는 변환 문자를 말한다. 매개변수들로는 읽어들인 데이터가 저장될 메모리를 지
정하는 변수, 즉 변수의 포인터를 사용해야 한다. 여기서 포인터 ( pointer ) 란 변수가 기
억된 위치 , 즉 주소 ( address )를 의미한다. 따라서, 어떤 변수에 데이터 값을 읽어들이
라면 변수명 앞에 간접연산자 ( & ) 를 붙이면 된다. 그러나, 문자열 변수에 데이터 값을
읽어들일 때에는 간접연산자를 사용하지 않고 문자열 변수명만 적은면 된다.
[ 표 4 - 3 ] 변환 문자
변환 문자 | 의 미 |
%d | 부호 있는 0진 정수를 읽어들인다. |
%h | short형 정수를 읽어들인다. |
%o | 부호 없는 8진 정수로 읽어들인다. |
%x | 부호 없는 16진 정수로 읽어들인다. |
%X | 부호 없는 16진 정수로 읽어들인다. |
%u | 부호 없는 정수로 읽어들인다. |
%f , %e | 부동 소수점 형태로 읽어들인다. |
%c | 하나의 문자로 읽어들인다. |
%s | 문자열로 읽어들인다. |
* | * 다음에 지정된 변환 기호에 해당하는 입력 데어터를 읽지 않고 건너뛴다. |
|
단일 문자를 입출력하는 버퍼형 입출력 함수이다. getchar ( ) 함수와 putchar ( ) 함수
는 stdio.h 라는 파일에 정의되어 있으므로 이 함수들을 사용할 경우에는 반드시
# include < stdio.h >를 프로그램의 선두에 선언해야 한다.
getchar ( ) 함수는 키보드로부터 한 번에 한 문자씩 읽어들여, 그 문자에 해당하는
ASCII 코드의 값을 정수형으로 선언된 변수에 할당하는 함수이다. 단, 파일의 끝을 만
나면 -1 의 값을 되돌린다.
getchar ( ) 함수의 일반 형식은 다음과 같다.
형 식 |
getchar ( ) ; |
예 |
int i ; i = getchar ( ) ; |
예를 들어 키보드로 문자 ' A '를 입력하면 정수형 변수 i 에 65가 기억된다.
putchar ( ) 함수는 화면에 한 문자씩 출력하는 함수이다. putchar ( ) 함수의 일반
형식은 다음과 같다.
형 식 |
putchar ( 인 수 ) ; |
putchar ( ) 함수는 인수의 ASCII 코드 값에 해당하는 문자를 출력한다. 단, 인수는
문자형 상수이거나 문자형 변수이다. 인수를 정수나 정수형 변수로 쓸 수도 있는데, 이
때 정수값에 해당하는 ASCII 문자가 출력된다.
예 |
putchar ( ' A ' ) ; |
|
|
gets ( ) 함수는 키보드로부터 문자열을 읽어들여 문자열 포인터가 가리키는 장소에
기억시키며, 그 포인터를 되돌려 주는 함수이다. gets ( ) 함수의 일반 형식은 다음과
같다.
형 식 |
gets ( 인 수 ) ; |
gets ( ) 함수는 개행문자 ( ' \n ' ) 앞에 있는 모든 문자 ( 공백, 탭 ( tab ) 포함 )를 읽어들이
며, 개행문자는 널문자 ( null character, ' \0 ' )로 바꾸어 기억된다. 이것은 개행문자 앞에
있는 문자들을 문자열로 만들어 주는 것을 의미한다.
|
한편, 문자열은 scanf ( ) 함수의 %s 변환기호를 이용하여 읽어들일 수도 있다. 그러
나 %s 변환기호는 공백, 탭, 개행문자를 만나면 문자열의 끝으로 간주하기 때문에 문
자열을 입력할 때에는 gets ( ) 함수를 많이 사용한다.
|
puts ( ) 함수는 문자열을 화면으로 출력하는 함수이다. ' \0 ' 을 만나면 ' \n ' 으로 바꾸
어 출력한다. 또한 문자열은 printf ( ) 함수의 %s 변환기호를 이용하여 출력할 수도
있다. puts ( ) 함수의 일반 형식은 다음과 같다.
형 식 |
puts ( 인 수 ) ; |
puts ( ) 함수와 printf ( ) 함수의 차이점은, puts ( ) 함수는 각 문자열마다 자동으로
개행문자 ( ' \n ' )를 출력하지만, printf ( ) 함수는 원하는 곳에만 개행 문자를 출력할 수
있다는 것이다.
|
|