프로그래밍/C2012. 2. 8. 19:50
사용법
%[flags][width][.precision]type

1. 형식 문자열에 사용하는 형식은, 출력할 값에 대해 각각 적용됩니다. 출력할 값이 세개라면 %문자 또한 세 번 나와야 합니다.
2. 형식 지정의 첫 번째 문자는 반드시 % 문자여야 합니다. %문자는 형식 지정에 사용하는 특수 문자로, %문자를 출력해야 한다면 두 번을 중복시켜서 %%와 같이 사용합니다.
3. []로 둘러싸인 부분은 옵션이므로 생략할 수 있습니다. 따라서, 최소한의 형식 지정은 %와 type으로 구성됩니다.
4. 각각의 옵션이 등장하는 순서는 반드시 지켜야 하고, 여러 개의 옵션을 함께 사용할 수 있습니다.


flags

1. 출력할 값의 앞에 표시할 문자를 설정하는 영역
2. 옵션이기 때문에 생략할 수 있습니다.
3. 여러 개의 플래그를 동시에 사용할 수 있습니다.
4. 기호

기호

설명

코드

출력

-

왼쪽 정렬. 기본 값은 오른쪽 정렬

printf( “[%6d]\n”, 123);

printf( “[%6d]\n”, -123);

[ 123]

[-123 ]

+

+ 또는 기호 추가

printf( “[%+d]\n”, 123);

printf( “[%+d]\n”, -123);

[+123]

[-123]

0

(zero)

앞자리에 공백 대신 0 추가

printf( “[%06d]\n”, 123);

printf( “[%06d]\n”,-123);

[000123]

[-00123]

(공백)

양의 정수일 경우, + 기호를 출력하는 대신 공백 추가

printf( “[%+d]\n”, 123);

printf( “[% d]\n”, 123);

[+123]

[ 123]

#

8진수와 16진수 출력에서, 공백 대신 0 또는 0x 출력

printf( “[%#o]\n”, 123);

printf( “[%#x]\n”, 123);

[0173]

[0x7b]



width

1. 출력할 값의 최소 너비를 지정합니다.
2. 출력할 값이 지정한 너비보다 작으면 자릿수를 맞추기 위해 공백 또는 0을 채워 넣습니다. 출력할 값이 너비보다 클 경우에는, 값이 잘리는 일은 있을 수 없으므로 width옵션은 무시됩니다.
3. 예제


percision

1. 출력할 값의 정확도를 위한 최대 자릿수를 설정합니다.
2. 출력할 값이 정수라면 최대 자릿수를 맞추기 위해 0을 추가합니다. 자릿수가 출력할 값보다 작을 경우에는 값을 자르거나 하지 않고 값을 모두 출력합니다. 이 옵션은 flags와 width옵션을 결합해서 같은 결과를 얻을 수 있습니다.
3. 출력할 값이 실수라면 소수점 이하의 최대 자릿수를 가리키고, 자릿수에 따라 반올림이 되거나 소수점 이하에 0이 추가됩니다. 실수 전체의 자릿수 설정은 width옵션을 사용합니다.
4. 예제


tpye
1. 숫자(number), 문자(character), 문자열(string) 중의 하나
2. 숫자는 정수와 실수로 나누어지고, 정수는 다시 부호 있는 정수와 부호 없는 정수로 나누어집니다.
3. 정수는 8진수, 10진수, 16진수 형태로 출력할 수 있고, 실수는 일반적인 표기법 이외에 지수(exponent) 표기법으로 출력할 수 있습니다.
4. 타입 문자

기호

설명

코드

출력

c

문자

printf(“[%3c]\n”, ‘A’);

printf(“[%-3c]\n”, ‘A’);

[ A]

[A ]

s

문자열

printf(“[%5s]\n”, “ABC”);

printf(“[%-5s]\n”, “ABC”);

[ ABC]

[ABC ]

d

부호 있는 10진수

printf(“[%d]\n”, 123);

printf(“[%d]\n”, -123);

[123]

[-123]

u

부호 없는 10진수

printf(“[%u]\n”, 123);

printf(“[%u]\n”, -123);

[123]

[4294967173]

o

부호 없는 8진수

printf(“[%5o]\n”, 123);

printf(“[%05o]\n”, 123);

[ 173]

[00173]

x, X

부호 있는 16진수

printf(“[%5x]\n”, 123);

printf(“[%05X]\n”, 123);

[ 7b]

[0007B]

p

주소를 16진수로 출력

int N = 123;

printf(“[%p]\n”, 123);

printf(“[%p]\n”, &N);

 

[0000007B]

[0012FED4]

e, E

지수 형식(d.dddd e +ddd)으로 실수 출력

printf(“[%e]\n”, 123.4567);

printf(“[%E]\n”, -123.4567);

[1.234567e+002]

[-1.234567E+002]

f

고정 형식(dddd.dddd)으로 실수 출력

printf(“[%f]\n”, 123.4567);

printf(“[%f]\n”, -123.4567);

[123.456700]

[-123.456700]

g, G

fe 형식 중에서 짧은 형식 선택

printf(“[%g]\n”, 123.4567);

printf(“[%G]\n”, -123.4567);

[123.457]

[-123.457]



탈출 문자(escape sequences)

A. 아스키 코드에는 출력되는 문자 이외에 커서의 위치를 설정하는 작업을 하는 문자들이 몇 가지 있습니다. 이들 탈출 문자는 단독으로 사용할 수 없고, 백슬러시(backslash, \)와 함께 사용되어 두 개의 문자가 하나의 문자처럼 사용됩니다.
B. 제어 문자는 탈출 문자 그 자체를 의미하는 문자로, 순수하게 출력을 제어하기 위해 사용합니다. 수직 탭과 폼 피드는 화면에서 이상한 문자를 출력하기 때문에 아무런 역활도 하지 않는 것처럼 보이지만, 프린터에 사용하면 올바르게 동작합니다.

이름

설명

형식

경고(alert)

경고음 발생

\a

7

백스페이스(backspace)

커서를 같은 줄의 이전 위치로 이동(이전 줄로 올라갈 수는 없음)

\b

8

수평 탭(horizontal tab)

커서를 다음 수평 탭의 위치로 이동

\t

9

개행(new line 또는 line feed)

커서를 다음 줄의 시작으로 이동

\n

10

수직 탭(vertical tab)

커서를 다음 수직 탭의 위치로 이동

\v

11

폼 피드(form feed)

커서를 다음 페이지의 시작으로 이동

\f

12

캐리지 리턴(carriage return)

커서를 줄의 시작으로 이동

\r

13


C. 다음의 보조 문자들은 printf 함수에서 특별한 의미로 사용하는 문자들이기 때문에, 출력하기 위해서는 제어 문자처럼 백슬러시와 함께 사용해야 합니다. 8진수와 16진수의 경우는 정해진 기호가 있는 것이 아니라 기호 뒤쪽에 오는 숫자들로 값을 해석합니다. 8진수와 16진수에 대한 예제는 뒤에 나옵니다. 이들 문자는 출력 자체와는 무관하지만 백슬래시를 사용하기 때문에 보통 탈출 문자라고 말합니다.

이름

설명

형식

큰 따옴표(double quote)

는 문자열을 구분

\“

34

작은 따옴표(single quote)

는 문자를 구분

\‘

39

백슬래시(\)

\는 탈출 문자를 구분

\\

92

8진수

표시된 숫자를 8진수로 해석

\Ooo

 

16진수 문자

표시된 숫자를 16진수로 해석

\xhh

 


D. 탈출 문자는 printf 함수에 직접 사용할 수도 있지만, 아스키 코드의 문자(character)와 동일하게 %c타입을 사용할 수도 있습니다. 가령, 다음 코드는 벨 소리를 세 번 울립니다.

문자

코드

\a

printf(“[\a\a\a]”); // [벨 소리 세 번]

\b

printf(“[%d]\b\b\bAB\n”, 50); // [AB]

\t

printf(“[\tA\t]”); // [ A ]

\n

printf(“[A\nB]”); // [A

// B]

\r

printf(“[%d]\rABC\n”, 50); // ABC]

\“

printf(“\”ABC\”“); // ”ABC“

\’

printf(“\’ABC\’”); // ‘ABC’

\\

printf(“\\ABC\\”); // \ABC\

\Ooo

printf(“[\101 %c]”,‘\101’); // [A A]

\xhh

printf(“[\x41 %c]”, ‘\x41’); // [A A]



예제





Posted by 건깡