서식문자

2022. 2. 9. 11:48IoT Embeded 강의

#서식문자

printf함수를 쓰다보면 안에 %d와 같이 %로 시작하는 어떤 문자를 넣습니다. 이를 서식문자 또는 형식지정자 라고 하는데 printf 함수에서 변수(또는 상수)와 대응시켜 변수를 문자열로 변환해 화면에 출력해줍니다. 표현하려는 변수값이 정수, 실수, 문자에 따라서 서식문자도 달라집니다. 이를 정리하면 아래와 같습니다.

서식문자 변환 방법 같이 쓰는 자료형
%d 부호 있는 10진 정수 short, int
%ld 부호 있는 10진 정수 long
%u 부호 없는 10진 정수 unsigned
%o 부호 없는 8진 정수 short, int, long
%x, %X 부호 없는 16진 정수 short, int, long
%f 부호 있는 10진 실수 float
%lf 부호 있는 10진 실수 double
%e 부동소수점 표현 방식의 10진 실수(가수e+지수 형태로 출력) float, double
%E 부동소수점 표현 방식의 10진 실수(가수E+지수 형태로 출력) float, double
%c 문자 char
%s 문자열  char*, char []
%p 포인터(메모리 주소) void*

 

정수형

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
 
int main()
{
    printf("자료형과 변수를 이용한 printf() 함수 연습 프로그램\n\n");
    //정수형
    short s_value = 100;
    int i_value = 1234;
    long l_value = 300;
    unsigned int  ui_int = 400;
    printf("short = %d, int = %d, long = %d, unsigned int = %d\n", s_value, i_value, l_value, ui_int);
    printf("short = %d, int = %d, long = %ld, unsigned int = %u\n", s_value, i_value, l_value, ui_int);
    printf("8진수 = %o, 16진수 = %x\n", s_value, s_value);  //s_value 는 100이고 이를 각각8진수와 16진수로 출력한다.
    printf("%d \n", i_value); //기본형 : 기본적으로 수를 화면에 출력할 때 왼쪽 정렬로 나온다. 
    printf("%6d \n", i_value); // 자리수를 지정하면 오른쪽 정렬로 나오고 자리수를 맞춰서 출력한다.
    printf("%+d \n", i_value); // +기호 표시하고 왼쪽 정렬로 나옴. 자리수 지정을 안했기 때문에
    printf("%+6d \n", i_value); // +기호 표시하고 자리수가 있으며 오른쪽 정렬.
    printf("%06d \n", i_value); // 자리수를 지정하고 빈 자리수는 0으로 채움. 오른쪽 정렬.
    return 0;
}
cs

실수형

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
int main()
{
    float f_value = 12.34f; //실수인 상수형은 기본적으로 double형이기 때문에 접미사를 붙여 float 형으로 명시해줌.
    double d_value = 123.456;
    printf("float = %f, double = %lf\n", f_value, d_value); //%f, %lf 는 기본적으로 소수점 6번째자리까지 출력
    printf("%f\n", f_value); // 기본형으로 소수점6번째까지 표시(소수점을 포함하면 7개 출력), 왼쪽 정렬
    printf("%7.1f\n", f_value); // 전체 7칸, 소수점 한자리, 소수자리 한자리 표시하고 오른쪽 정렬
    printf("%+7.2f\n", f_value); // 전체 7칸, 소수점 한자리, 소수자리 두자리 표시하고 오른쪽 정렬
    printf("%7.3f\n", f_value); // 전체 7칸, 소수점 한자리, 소수자리 세자리를 표시하고 12.34이므로 세번째 자리는 0으로 표시. 오른쪽 정렬
    printf("%07.2f\n", f_value); // 전체 7칸, 소수점 한자리, 소수자리 두 자리 표시하고 오른쪽 정렬 앞쪽의 빈자리는 0으로 채운다.
 
    return 0;
}
cs

문자형

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int main()
{
    char c_value1 = 65;
    char c_value2 = 'B';
 
    printf("char = %c , char = %d\n", c_value1, c_value2);
 
    char* st_value = "C Program";
    printf("%s\n", st_value); // 문자열 크기만큼 출력. 왼쪽정렬
    printf("%10s\n", st_value); // 10칸 지정을 하고 오른쪽 정렬이 되므로 왼쪽 공백이 생긴다.
    printf("%-10s\n", st_value); // 10칸 지정하고 - 이므로 왼쪽정렬. 없는 것처럼 보이지만 공백이 오른쪽에 한칸 있음.
 
    return 0;
}
cs

 

소스코드를 작성하여 서식문자를 변형시켜가면서 변수를 출력해보시면 서식문자의 내용에 대해 아실 수 있습니다. 또한 서식문자 중간에 숫자와 부호를 넣으면서 출력 형태를 설정할 수 있습니다. 이는 다음과 같습니다.

 

1. %정수d : 어떤 변수를 '정수'자리 만큼 출력하고 오른쪽 정렬을 합니다.

-자리수(칸)을 지정하게 되면 출력할 때 데이터값을 오른쪽으로 정렬한 뒤 자리수를 맞춰서 출력합니다. 자리수를 지정하지 않으면 기본적으로 왼쪽 정렬입니다.

 

2. %+d : 화면에 출력할 때 +기호를 붙여서 출력합니다.

 

3. %-d: 왼쪽 정렬을 합니다.

 

4. %07d: 자리수를 7자리로 지정하고 만약 데이터가 모든 자리수를 채우지 못하면 빈 자리는 0으로 채웁니다. 소수점 자체도 자리를 한칸 차지함을 기억해야 합니다.

 

5. %7.3f: 실수 표현에서 자리수를 7자리로 지정하고 소수자리는 세번째까지 표시합니다. 만일 소수자리수가 2번째까지 있다면 남은 세번째는 0으로 채워집니다. 

 

8진수,16진수 서식문자를 사용하게 되면 십진수를 8진수, 16진수로 변환해서 출력합니다. 변수에 십진수 100이 대입되어 있고 이를 %o, %x와 대응시켜 출력하게 되면 144, 64가 출력됩니다.

 

문자형 같은 경우는 변수가 정수일 때 %c에 대응시켜 출력시키면 아스키코드 대응시켜 문자를 출력합니다. 아스키 코드에서 '65'는 문자 'A'를 의미하므로 65를 %c에 대응시킬 시에는 'A'가 출력됩니다. 반대의 경우도 가능합니다. 변수에 문자'B'가 대입되어 있다면 이를 %d에 대응시켜 숫자 '66'을 출력할 수 있습니다.

 

문자열은 %s에 대응시키면 기본적으로 문자열 길이 만큼 출력합니다. 만일 %10s와 같이 자리수를 지정한다면 10칸 안에 문자열을 출력하고 오른쪽 정렬을 합니다. 빈 칸은 왼쪽에 공백으로 출력합니다. %-10s로 서식문자를 사용할 시 앞선 상황과 동일하게 왼쪽 정렬을 하고 빈칸은 오른쪽에 공백으로 나타나게 됩니다.