Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어 형식 지정자(Format Specifier) 총정리: 종류와 사용법

C 언어에서 형식 지정자(Format Specifier)는 입력과 출력을 위해 사용되는 특수 기호입니다. 이 개념을 활용하면 컴파일러가 scanf() 함수로 입력을 받거나 printf() 함수로 출력할 때 변수에 담긴 데이터가 어떤 자료형인지 정확히 판단할 수 있습니다.

주요 형식 지정자 목록

형식 지정자자료형 / 용도
%c문자(Character)
%d부호 있는 정수(Signed integer)
%e 또는 %E실수의 과학적 표기법
%f실수(Float) 값
%g 또는 %G%e, %E와 유사한 실수 표기
%hi부호 있는 short 정수
%hu부호 없는 short 정수
%i정수(%d와 동일하게 동작)
%l, %ld, %lilong 정수
%lfdouble 실수
%Lflong double 실수
%lu부호 없는 int 또는 unsigned long
%lli 또는 %lldlong long 정수
%llu부호 없는 long long 정수
%o8진수 표현
%p포인터 주소
%s문자열(String)
%u부호 없는 정수(unsigned int)
%x 또는 %X16진수 표현
%n아무것도 출력하지 않음
%%% 문자 자체를 출력

형식 지정자에 추가할 수 있는 옵션

위의 기본 형식 지정자 외에도 출력 형태를 세밀하게 조절하기 위해 다음과 같은 요소들을 추가로 조합할 수 있습니다.

  • 마이너스 기호(-): 출력을 왼쪽으로 정렬합니다.

  • % 뒤의 숫자: 최소 필드 폭(field width)을 지정합니다. 문자열 길이가 지정한 폭보다 짧으면 남는 공간은 공백으로 채워집니다.

  • 마침표(.): 필드 폭과 정밀도(precision)를 구분하는 데 사용됩니다.

예제 코드

#include <stdio.h>
main() {
    char ch = 'B';
    printf("%c\n", ch); // 문자 데이터 출력
    // d와 i로 10진수(정수) 데이터 출력
    int x = 45, y = 90;
    printf("%d\n", x);
    printf("%i\n", y);
    float f = 12.67;
    printf("%f\n", f); // 실수 값 출력
    printf("%e\n", f); // 과학적 표기법으로 출력
    int a = 67;
    printf("%o\n", a); // 8진수 형식으로 출력
    printf("%x\n", a); // 16진수 형식으로 출력
    char str[] = "Hello World";
    printf("%s\n", str);
    printf("%20s\n", str); // 문자열을 포함해 총 20자리로 오른쪽 정렬
    printf("%-20s\n", str); // 왼쪽 정렬
    printf("%20.5s\n", str); // 총 20자리로 오른쪽 정렬하고 문자열은 5자리까지만 출력
    printf("%-20.5s\n", str); // 왼쪽 정렬 후 문자열을 5자리까지만 출력
}

실행 결과

B
45
90
12.670000
1.267000e+001
103
43
Hello World
         Hello World
Hello World
               Hello
Hello

scanf()에서의 활용

이러한 형식 지정자는 printf()뿐만 아니라 scanf() 함수에서도 동일한 방식으로 사용할 수 있습니다. 즉, 위 예제에서 출력했던 것과 같은 방식으로 사용자로부터 입력값을 받아올 수 있습니다. 다만 scanf() 사용 시에는 변수 앞에 반드시 주소 연산자(&)를 붙여야 한다는 점을 기억하세요.