검색결과 리스트
글
출력함수 printf는 내부의 수치 값을 문자로 바꾸어 준다. 이 전의 장들에서는 간단한 방법으로 printf를 사용하였다 여기서 설명된 사항들은 많이 쓰이는 전형적인 사례만을 언급하였다.전반적인 설명은 부록을 참고하자
int printf(char *format,arg1,arg2,...)
printf는 format이라는 문자열의 제어하에서 표준 풀력 장치에 매개변수를 변환하고 형식화한 다음 출력시키고 풀력된 문자의 개수를 리턴한다. 출력형식 제어 문자열(format)은 두 종류의 대상체를 포함한다. 하나는 출력될 보통 문자이고 또 다른 하나는 출력 형식을 정해 주는 문자인데 매개변수를 지정된 형태로 변환시켜 printf로 출력하게 한다. 변환문자의 앞에는 %를 붙인다.%와 변환문자 사이에는 다음과 같은것이 순서대로 올 수있다.
-변환된 매개변수를 왼쪽에 맞추어 출력하게 하는 마이너스 부호
-최소너비를 지정하는 숫자 변환된 매개변수는 적어도 이 너비로 출력된다 만일 필요하다면 왼쪽 또는 오른쪽의 폭을 맞추기 위해 대른것(공백 또는 0)으로 체워진다.
-유효숫자를 나타내는 마침표(.)
-정밀도를 나타내는 숫자. 이숫자는 문자열을 출력하는 경우 그 최대 길이를 실수 값인 경우는 소수점 이하 숫자 길이를 정수 출력의 경우는 최소 숫자 길이를 나타낸다.
-만일 정수가 short로 출력되어야 하면 h,long으로 출력시키려면 소문자 1을 쓴다
변환문자는 아래 나타냈다 만일 %뒤의 문자가 변환문자가 아닌 경우는 동작이 정의되어 있지 않다.
문자 |
변수형태 |
출력된 형태 |
d,i |
int |
10진수 |
o |
int |
부호없는 8진수 |
x,X |
int |
부호없는 16진수(앞에 0x나 0X가 없는),10,...15에 대해 abcdef나 ABCDEF를 사용한다 |
u |
int |
부호없는 10진수 |
c |
int |
단일 문자 |
s |
char * |
문자열로 부터 '\0'가 있을때 까지 문자가 출력되거나 정밀도에 의해 주어진 문자수 만큼 문자가 출력된다 |
f |
double |
[-]m,dddddd 여기서 d의 수는 정밀도에 의해서 주어진다(기본설정 값은 6이다.) |
e,E |
double |
[-]m,dddddd e+-xx또는,[-]m,ddddddE+-xx,여기서 d의 수는 정밀도에 의해서 주어진다(기본설정 값은 6이다.) |
g,G |
double |
만일 지수가 주어진 정밀도 이상이거나 -4보다 작으면 %e나 %E를 사용하고 그렇지 않으면 %f를 사용한다. 뒤에 붙는 0과 소수점은 출력되지 않는다. |
p |
void * |
포인터(시스템에 따라 표현이 다름) |
% |
변환되지 않는다 |
%를 출력 |
폭(정밀도)은 *로도 표현될수 있는데 그러면 출력형태는 출력될 매개변수에 의해 결정된다 예를 들면 문자열 s로부터 max 문자를 출력한다.
printf("%.*s",max,s);
대부분의 출력형 변환은 앞에서 설명하였지만 여기서 더 자세히 설명하기로 한다.
다음의 표는 "hello,world"(12문자)를 출력 시키는데 있어서의 여러가지 변환 효과를 나타내었다. 각각 필드의 주위에 콜론(;)을 찍어서 그들의 범위를 알 수 있게 하였다.
:%s: :hello, world:
:%10s: :hello, world:
:%.10s: :hello, wor:
:%-10s: :hello, world:
:%.15s: :hello, world:
:%-15s: :hello, world :
:%15.10s: : hello, wor:
:%-15.10s: :hello, wor :
printf는 매개변수의 개수와 그들의 형태가 무엇인지를 결정하기 위해 첫번째 매개변수를 이용한다. 만일 매개변수가 충분치 않거나 형(type)이 틀렸을 경우에는 혼란을 일으키게 되어 무의미한 결과를 얻게 된다. 다음의 두 호출 사이의 차이가 뭔지 잘 보기 바란다.
printf(s); /* FAILS if s contains % */
printf("%s",s); /* SAFE */
sprintf 함수는 printf가 행하느 같은 변환을 행하지만,출력을 문자열(string)에 저장하는 것이 다른점이다.
int sprintf(char *sting,char *format,arg1.arg2,...)
sprintf는 arg1,arg2등의 매개변수를 printf와 같은 방법으로 형식화 시킨다. 하지만 표준 입출력 대신에 문자열에 결과를 저장한다. 문자열은 결과를 수용할 만큼의 충분한 크기여야 한다.
예제 7-2 임의의 입력을 알아볼 수있는 형태로 출력시키는 프로그램을 작성하라 그래픽 문자가 들어오면 8진수나 16진수로 출력시켜야 하며,긴 행은 적당한 길이로 끊어서 출력해야 한다.
'프로그래밍 > C' 카테고리의 다른 글
7.4 형식화된 입력:scanf(Formatted Input - Scanf) (0) | 2014.11.09 |
---|---|
7.3 가변길이의 매개변수 리스트(Variable-length Argument Lists) (0) | 2014.11.08 |
7.1 표준 입력과 출력(Input and Output) (0) | 2014.11.08 |
6.9 비트 필드(Bit-fields) (0) | 2014.11.08 |
6.8 유니온(Unions) (0) | 2014.11.08 |
RECENT COMMENT