printf 02

gfs0101·2022년 10월 6일
0

printf

목록 보기
2/2

개요

각 옵션마다 특이사항이 있어서 어떤식으로 구현하였는지 정리해 보았다

c

char 하나만 출력하는 옵션으로 '-'플래그를 체크하고 공백이 먼저 나올지 문자가 먼저나올지 분리해 주었다

s

str을 출력하는 옵션이다
str이 NULL일때는 (null) 총 6바이트가 출력되어야 한다

입력

#include <stdio.h>

int main()
{
	printf("%d\n\n", printf("%s\n", NULL));
	printf("%d\n\n", printf("%8s\n", NULL));
	printf("%d\n\n", printf("%4s\n", NULL));
	printf("%d\n\n", printf("%4.2s\n", NULL));
	printf("%d\n\n", printf("%.s\n", NULL));
}

출력

(null)
7

  (null)
9

(null)
7

  (n
5


1

출력되는 (null)을 precision, wide 값에 따라 조정해야한다
그렇기 때문에
precision이 존재 하는지 없는지에 따라 두가지 케이스로 나누고 출력해주었다

그 외에는 '-' 플래그 존재 여부에 따라 두가지로 나누고 문자의 길이와 precision값을 비교하여 긴쪽을 기준으로 잡아 출력해주었다

입력

#include <stdio.h>

int main()
{
	printf("%d\n\n", printf("%s\n", "hello"));
	printf("%d\n\n", printf("%8s\n", "hello"));
	printf("%d\n\n", printf("%4s\n", "hello"));
	printf("%d\n\n", printf("%4.2s\n", "hello"));
	printf("%d\n\n", printf("%.s\n", "hello"));
}

출력

hello
6

   hello
9

hello
6

  he
5


1

p

pointer 가 null을 가르킬때 0x0 출력을 따로 빼주었고 그 외에는 컨버트 베이스를 이용하여서 16진수로 바꿔주었다

d

로직은 플래그와 각종옵션을 바탕으로 정보 가공을 하고
wide에 따라 출력 크기를 정해주었다
특이하게도 가변인자의 값이 0일때 예외케이스들이 있어서 따로 빼주었다

입력

#include <stdio.h>

int main()
{
	printf("%d\n\n", printf("%+.d\n", 0));
	printf("%d\n\n", printf("% d\n", 0));
	printf("%d\n\n", printf("% .d\n", 0));
	printf("%d\n\n", printf("%+d\n", 0));
	printf("%d\n\n", printf("%d\n", 0));
}

출력

+
2

 0
3

 
2

+0
3

0
2

u

단순히 unsigned형으로 받아주고 부호관련기능을 뺐다

x

똑같은 로직이다 단순히 대문자 소문자 구분을 해주었고 #옵션을 넣게되면 그만큼 길이가 길어지도록 만들었다

profile
열심히살자

0개의 댓글