입출력 형식
C 언어에서는 printf, scanf 등 다양한 함수에서 변수를 입출력에 사용하기 위해 서식 지정자와 플래그 등을 조합해서 사용한다. 예를 들어 a 라는 변수에 숫자를 입력받고, 입력된 숫자를 출력하기 위해서는 아래와 같은 코드를 사용할 수 있다.
int a;
scanf("%d", &a);
printf("%d", a);
위 코드에서 %d 에 해당하는 것이 입출력 형식인데, 여기서는 간단하게 서식 지정자만 사용되었다.
간단하게 서식 지정자만으로도 사용할 수 있지만, 플래그, 폭 등을 지정해서 사용해야 될수도 있다. 예를 들어서 변수를 16 진수로 출력하거나, 폭을 지정하는 등 원하는 형식으로 출력하려 한다면 서식 지정자 외 플래그 등을 사용해야 한다.
입출력 형식은 아래와 같다.
%[플래그][폭][.정밀도][길이]서식 지정자
서식 지정자
서식 지정자 | 의미 |
d, i | 부호를 포함한 10진수 정수 |
u | 부호를 포함하지 않는 10진수 정수 |
o | 부호를 포함하지 않는 8진수 정수 |
x | 부호를 포함하지 않는 16진수 abcdef를 소문자로 표기 |
X | 부호를 포함하지 않는 16진수 ABCDEF를 대문자로 표기 |
f | 소수점으로 표현한 10진수 실수 NaN, Inf 등을 소문자로 표기 |
F | 소수점으로 표현한 10진수 실수 NaN, Inf 등을 대문자로 표기 |
e | 지수 표기법으로 표현한 10진수 실수 e를 소문자로 표기 |
E | 지수 표기법으로 표현한 10진수 실수 E를 대문자로 표기 |
g | 소수점 표기법과 지수 표기법 중 짧은 길이로 표현되는 서식 지정자 사용 소수점 이하 불필요한 0은 생략 e를 소문자로 표기 |
G | 소수점 표기법과 지수 표기법 중 짧은 길이로 표현되는 서식 지정자 사용 소수점 이하 불필요한 0은 생략 e를 대문자로 표기 |
a | 16진수 실수 abcdef를 소문자로 표기 |
A | 16진수 실수 ABCDEF를 대문자로 표기 |
c | 문자 |
s | 문자열 |
p | 포인터 주소 |
n | 출력한 문자 개수를 저장 |
길이
길이 | 의미 |
hh | 매우 짧은 정수형 char, unsigned char |
h | 짧은 정수형 short, unsigned short |
l | 긴 정수형 혹은 긴 실수형 long, unsigned long, double |
ll | 매우 긴 정수형 long long, unsigned long long |
L | 매우 긴 실수형 long double |
int, float 등은 길이를 나타낼 필요 없이 그냥 사용하면 된다.
플래그
플래그 | 의미 |
+ | 양수일 때는 + 부호 출력 음수일 때는 - 부호 출력 |
- | 왼쪽 정렬 |
(공백) | 양수일 때는 부호를 출력하지 않음 음수일 때는 - 부호 출력 |
# | 숫자 앞에 진법을 표기 실수의 경우 항상 소수점을 표시 소수점 이하 불필요한 0을 생략하지 않음 |
0 | 출력하는 폭의 남는 공간에 0 을 출력 |
폭과 정밀도
폭은 출력되는 문자열의 폭을 지정한다. 항상 동일한 폭으로 출력하고 싶은 경우에 많이 사용한다. 예를 들어 사용자의 이름을 같은 폭으로 출력하고 싶은데, 사용자의 이름이 어떤 사용자는 두 글자이고, 어떤 사용자는 세 글자라면 폭을 세 칸으로 지정해서 사용자의 이름이 출력되는 폭을 똑같게 맞춰줄 수 있다.
정밀도는 소수점 아래 출력되는 자리를 지정할 때 많이 사용된다. 예를 들어 소수점 세 번째 자리까지만 출력하고 싶다면 .3 을 사용하면 된다.
정밀도는 문자열의 길이도 지정할 수 있다. 예를 들어 어떤 문자열을 입력받을 때 20 자 이상 넘으면 안된다면 .20s 를 사용하여 20 글자까지만 입력받을 수 있고, 또는 .20s 로 출력하여 20 자를 넘어가는 글자는 출력하지 않을 수 있다.
'Language > C & C++' 카테고리의 다른 글
[C++] 값에 의한 호출(call by value)과 주소에 의한 호출(call by address) 그리고 참조에 의한 호출(call by reference) (0) | 2024.10.13 |
---|---|
[C++] 동적 메모리 할당 및 반환 (0) | 2024.10.13 |
[C++] 클래스(class)와 객체(object) 선언 (0) | 2024.09.18 |
[C] 연산자 우선순위 (0) | 2024.08.30 |
[C] 기본 자료형 크기와 범위 (0) | 2024.08.29 |