< ๋ชฉํ >
๋ช๋ช ๊ฐ์ ํ์์ ์ ์ธํ printf๋ฅผ ๋๊ฐ์ด ๊ตฌํํ๋ค.
< type > : ( "cspdiuxX%" )
< flag > : ( - , 0 , . , * )
github
GitHub - k010103/ft_printf.a
Contribute to k010103/ft_printf.a development by creating an account on GitHub.
github.com
< ๊ณต๋ถ ์ ๋ฆฌ >
< c >
minus , width 2๊ฐ ๊ด์ฌ.
va_arg ๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ
va_arg(ap, char) ์ ๋ถ๊ฐ๋ฅํ ํ์์ด๋ฏ๋ก, va_arg(ap, int) ํ์์ผ๋ก ๋ฐ์์ผ ํ๋ค.
< s >
minus , width 2๊ฐ ๊ด์ฌ.
va_arg(ap, char *) ํ์์ผ๋ก ๋ฐ์์ผ ํ๋ค.
๋ช๋ช ๊ฐ์ ๋ฐ๋ก๋ค์ ์ ์ธํ๊ณ ๋ c์ ๊ฐ์์๋ค.
๊ฐ์ด NULL๋ก ๋ค์ด์จ ๊ฒฝ์ฐ์๋ ๋ฐ๋ก ๋นผ์ ๋ฐ๋ก๋ฅผ ๋ฃ์ด์ฃผ๋ ์์ ์ด ํ์ํ์๋ค.
str = "(NULL)"
s_len = 6;
< d >
์ ๋ฐ๋ ํ๋๊ทธ๊ฐ ์์. ( -, 0, . , * )
va_arg(ap, int) ํ์์ผ๋ก ๋ฐ์์ฌ ์ ์๋ค.
d i u x X p ๋ชจ๋ d๋ก ํด๊ฒฐ ๊ฐ๋ฅ
d == i
"%-10.5d" "-1234"
>>-01234 %
"%010.5d" "-1234"
>> -01234%
"%010.5d" "1234"
>> 01234%
"%10.5d" "1234"
>> 01234%
"%10.0d" "0"
>> %
"%10.0d" "3"
>> 3%
"%10.1d" "0"
>> 0%
zeroํ๋๊ทธ์ ๊ฒฝ์ฐ ์ ๊ฒฝ ์จ์ค์ผ ํ๋ ๋ฐ๋ก๋ค์ด ๋ง์ด ๋ณด์์ด์ ๊ฐ์ฅ ์ ๊ฒฝ์ด ๋ง์ด ์ฐ์๋ ํ์ ,
precision๊ฐ 0์ด๊ณ d ๊ฐ์ด 0์ด๋ผ๋ฉด ์ถ๋ ฅ x
precision๊ฐ 0์ด๊ณ d ๊ฐ์ด 0์ ์ ์ธํ ๊ฐ์ด๋ผ๋ฉด ์ถ๋ ฅ o
< x >
์ ๋ฐ๋ ํ๋๊ทธ๊ฐ ์์. ( -, 0, . , * )
" 0123456789abcdef " 16์ง์
va_arg(ap, unsigned int) ํ์
d์ ์ ์ฒด์ ์ธ ํ๋๊ทธ๋ ๊ฐ์ผ๋, 10์ง์๋ฅผ 16์ง์๋ก ๋ณํ์ ํด์ฃผ๋ ์์
์ด ์ถ๊ฐ์ ์ผ๋ก ํ์ํ์๊ณ ,
๊ฐ์ด ์์๋ก ๋ค์ด์ค๋ ๊ฒฝ์ฐ๋ ์กด์ฌํ์ง ์์ผ๋ฏ๋ก ์ ์ธํ์๋ค.
< X >
์ ๋ฐ๋ ํ๋๊ทธ๊ฐ ์์. ( -, 0, . , * )
" 0123456789ABCDEF " 16์ง์
va_arg(ap, unsigned int) ํ์
x์ ์์ ํ ๊ฐ์ผ๋, 16์ง์ ๋ถ๋ถ์์ ์ํ๋ฒณ์ ๋๋ฌธ์๋ก ์ค๋ช
์ ํด์ฃผ๋ ์์
์ ํด์ฃผ์ด์ผ ํ์๋ค.
๋๋จธ์ง๋ ์์ ํ ๋๊ฐ์ด ์งํ.
< p >
precision , point๋ฅผ ์ ์ธํ ํ๋๊ทธ
va_arg(ap, long long) ํ์.
x์ ์ ์ฒด์ ์ผ๋ก ๊ฐ๊ณ , 0x๋ฅผ ์ถ๊ฐ์ ์ผ๋ก ๋ถ์ฌ์ฃผ๋ ์์ ์ด ํ์ํ์์๋ค.
10์ง์๋ก ๋ค์ด์จ ๊ฐ์ 16์ง์๋ก ๋ณํํ๋ ์์ ์ด ํ์ํ์์๋ค..
< i >
์ ๋ฐ๋ ํ๋๊ทธ๊ฐ ์์. ( -, 0, . , * )
d์ ์์ ํ ๊ฐ๋ค.
์ฐจ์ด์ ์ i๋ 10์ง์/8์ง์/16์ง์๋ฅผ ๋ชจ๋ ๋ฐ์ ์ ์๋ค๋ ์ ์ด ์๋ค๋๋ฐ
๋ฐ๋ก ์ฝ๋๋ฅผ ์ ์ง์ค๋ ๋๋ ๊ฑฐ ๊ฐ์ผ๋ฏ๋ก, ์์ ํ ๋๊ฐ์ด ์ฌ์ฉ.
ํ์์ง์ ์ %i, %d ์ฐจ์ด
์ ์๋ฅผ printfํ ๋ ํ์์ง์ ์ %i, %d๋ ๋ค ์ธ ์ ์๋๊ฑธ๋ก ์๋๋ฐ๋์ด ๋ญ๊ฐ ๋ค๋ฅด๊ธธ๋ ๋ฐ๋ก ๋ง๋ค์ด๋จ๋์?
hashcode.co.kr
< u >
์ ๋ฐ๋ ํ๋๊ทธ๊ฐ ์์. ( -, 0, . , * )
d์ ์ ์ฒด์ ์ผ๋ก๋ ๊ฐ๊ณ . u ๊ฐ์ ๊ฒฝ์ฐ์๋ int์ ๋ฒ์๋ฅผ ๋์ด์๊ธฐ ๋๋ฌธ์
(unsigned int)va_arg(ap, int) ํ์์ด๋ va_arg(ap, unsigned int) ํ์์ผ๋ก ๋ฐ์์ฃผ๋ ํ์์ผ๋ก ์ถ๊ฐ์ ์ผ๋ก ์ค์ ์ ํด์ฃผ์๊ณ ,
์์ ๊ฐ์ ๊ฒฝ์ฐ์๋ ๋ด๊ธธ ์ ์๊ธฐ ๋๋ฌธ์ ์์์ ๊ด๋ จ๋ ์ฝ๋๋ค์ ์ ๊ฑฐํด ์ฃผ์๋ค.
< % >
minus , zero , width ํ๋๊ทธ 3๊ฐ ๊ด์ฌ.
ft_printf ("%%");
์์ ๊ฐ์ด ๋ค์ด์ฌ ๊ฒฝ์ฐ์๋ "%"๋ฅผ ์ถ๋ ฅํ๋ type.
๊ทธ๋ฅ ์ถ๋ ฅ๋ง ํด์๋ ์๋๊ณ , c์ ๊ฐ์ด ํ๋๊ทธ๋ ๋ฐ์ ์ ์์ด์ผ ํ๋ค๊ณ ์ด์ผ๊ธฐ๋ฅผ ๋ค์ด์.
c์ ๊ฐ์ด ๋ฐ๋ก๋ฅผ ๋ฐ๋ ๋ถ๋ถ๋ ์ถ๊ฐ๋ก ์ค์ ํด ์ฃผ์๋ค.
<flag> ( ’-0.*’ )
[flag][width]. [precision] type
- : ํ๋์์ ๊ฐ์ ์ผ์ชฝ์ผ๋ก ์ ๋ ฌํ๋ค. ๊ธฐ๋ณธ์ ์ค๋ฅธ์ชฝ ์ ๋ ฌ
0 : ์ซ์ ๊ฐ์ด ์ค๋ฅธ์ชฝ ์ ๋ ฌ์ผ ๋ ๋จ๊ฒ ๋๋ ๋น ๊ณต๊ฐ์ ๊ณต๋ฐฑ์ด ์๋ 0์ผ๋ก ์ฑ์ด๋ค.
. : ๋จ์ ์ซ์๋งํผ ์์์ ์ ์๋ ์๋ฆฌ๋ฅผ ์ถ๋ ฅํ๋ค. (์ค์, ์ ์, ๋ฌธ์์ด ๋ชจ๋ ๊ฐ๋ฅ)
* : ํญ๊ณผ ๊ธธ์ด๋ฅผ ์ง์ ํด์ ๋ฐ๋๋ค.
zero์ minus๊ฐ ๊ฐ์ด ๋ค์ด์จ ๊ฒฝ์ฐ์๋ zero ๋ฌด์.
<๋ณด๋์ค>
' ' ์ ๋ฐ๋ฅธ ์ฐ์ฐ
์์ ๊ณต๋ฐฑ์ด ํฌํจ๋์ด์๋ ๊ฒฝ์ฐ
printf("% 10d", 1234); // len_a = 1234, number = 10
printf("% d", 1234);
>> 1234
printf("% 5d", 1234);
>> 1234
printf("% 6d", 1234);
>> 1234
๋ฐ์ ์์ฒ๋ผ ๋ฐ๋ก๋ฅผ ์ถ๊ฐ๋ก ๋ฃ์ด์ฃผ์ด์ผ ํ๋ค.
a = len_a >= number ? 1 : number - len_a;
or
if (len_a >= number)
retirn (1);
else if (len_a < number)
return (number - len_a)
ํด ๋ณด๋ ค๊ณ ๋ง์๋จน์๋ค๊ฐ, ๋ฐ๋ก๋ค๋ ๋ง๊ณ ์ ๊ฒฝ ์ธ ๊ฒ๋ค์ด ๋๋ฌด ๋ง์ ๊ฑฐ ๊ฐ์์ ํฌ๊ธฐ. ใ
<๊ตฌํ ๋ฐฉ๋ฒ ์๊ฐ ์ ๋ฆฌ>
1. ft_printf๊น์ง ์ต์ข ๋ฌธ์์ด๋ก ๊ฐ์ ธ์์, ๋ฌธ์์ด์ ์ถ๋ ฅํ๊ณ ft_strlen์ ํตํด ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๋ฐํํ๋ค.
2. ft_printf๊น์ง ๋ฌธ์์ด์ ๊ธธ์ด๋ง ๊ฐ์ ธ์ค๊ณ , ๋ฌธ์์ด์ ์ถ๋ ฅ ๊ฐ์ ๊ฒฝ์ฐ๋ ์ํฉ์ ๋ง์ถฐ ๊ทธ๋๊ทธ๋ ๋ฐ๋ก ์ถ๋ ฅํ๋ค.
>> ํ์ ์ ํ
์ผ๋จ ํจ์ฌ ๊ฐ๋จํ๊ณ ์ ์์ ๋นํด ์ก์์ผ ํ ์ค๋ฅ๋ ์ ์ ๊ฑฐ ๊ฐ์ ๋ณด์ธ๋ค.
< ์๊ฐํด ๋ด์ผ ํ ๊ฒ >
1. ํ๋๊ทธ ๊ฐ์ ๊ฒฝ์ฐ์๋ ์ด๋ป๊ฒ ํ์ฌ, ๊ฐ์ ๋ฝ์๋ด์ด ์ ๋ฆฌํ ๊ฒ์ธ๊ฐ.
ํ๋๊ทธ ๊ฐ์ ๊ฒฝ์ฐ ์ถ๋ ฅ ํ์ ์ ๋ฐ๋ผ ์ ์ฉ์ด ๋๊ฑฐ๋ ์ ๋๋ ๊ฒ๋ ์กด์ฌํ๊ณ , ์ถ๋ ฅ ํ์ ์ ๋ฐ๋ผ ๊ฐ์ด ๋ฐ๋๋ ๊ฒฝ์ฐ๋ ์กด์ฌํ๋ค.
๋ณด๋์ค๋ฅผ ์ ์ธํ ํํธ์์ ’-0.*’๋ฅผ ์ ์ฉํด์ผ ํ๋๋ฐ ์ด๊ฒ๋ง ํด๋. ์๋นํ ๋ง์ ๋ฐ๋ก๋ค์ด ๋์ฌ ์ ์๋ค.
printf("% -10.12d", 5);
>> 000000000005%
printf("% -10.12f", 5.0);
>> 5.000000000000%
>> ์ด์ฐจํผ ๋ค์ด์ค๋ ์์๋ ์ด๋ ์ ๋ ์ ํด์ ธ ์์ผ๋ฏ๋ก ๊ทธ๊ฒ์ ๋ง์ถฐ์ ์
๋ ฅ๊ฐ์ ๋ฐ๋๋ค.
๋ฌด์์ด ์ฐ์ ์ด๊ณ ์ด๋ค ํ๋๊ทธ๊ฐ ๋ค์ด์ค๋ฉด ์ด๋ค ํ๋๊ทธ๋ ๋ฌด์๋๋์ง ๊ทธ๋ฌํ ๋ถ๋ถ๋ค์ ์๊ฐํด์ผ ํ๋ค.
[flag][width]. [precision] type ํํ
2. format์ ์๋ชป๋ ๊ฐ์ด ๋ค์ด์จ ๊ฒฝ์ฐ ๋ฐ๋ก๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌ๋ฅผ ํด์ผ ํ๋๊ฐ.
๋ค์ด์จ ๊ฐ๋ค ์ค์์ ํ๋๋ผ๋ ์ธ์ ์ด ์ ๋๋ ์๋ชป๋ ๊ฐ์ด ๋ค์ด์จ๋ค๋ฉด, ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ๊ทธ ๊ฐ์ ๋ฐํํด์ผ ํ๋ค.
printf("% d% 10.12rd %d ", 4, 3, 2);
>> 4 rd 3 %
>> warning ์ด ์ผ์ด๋๋ฏ๋ก ์ถ๋ ฅ ๊ฐ์ ๋ฌ๋ผ๋ ์๊ด์ด ์์. ํ๋ก๊ทธ๋จ์ด ๋ฉ์ถ๊ธฐ ์๋๋ก ์ค๊ณ.
< ๋ถ์กฑํ ๋ถ๋ถ >
1. ๊ฐ๋ณ ์ธ์ ํจ์ ์ฌ์ฉ๋ฒ
์ด๋ฒ ft_printf๋ฅผ ์์ฑํ๋ฉด์ ๊ฐ๋ณ ์ธ์ ํจ์๋ผ๋ ๊ฒ์ ์ฒ์ ๋ดค๊ณ , ์ฒ์ ์ ํด๋ดค์ต๋๋ค.
์ด๋ป๊ฒ ์ฌ์ฉ์ ํด์ผ ํ ์ง ์์งํ๊ณ , ๋ถ์กฑํ ๋ถ๋ถ๋ค์ ๋ฐฐ์ฐ๋๋ก ํด์ผ ํ ๊ฑฐ ๊ฐ๋ค.
C ์ธ์ด ์ฝ๋ฉ ๋์ฅ: 66.1 ๊ฐ๋ณ ์ธ์ ํจ์ ๋ง๋ค๊ธฐ
66 ํจ์์์ ๊ฐ๋ณ ์ธ์ ์ฌ์ฉํ๊ธฐ C ์ธ์ด์์ ํจ์๋ฅผ ์ฌ์ฉํ๋ค ๋ณด๋ฉด printf, scanf๊ฐ์ด ๋งค๊ฐ๋ณ์์ ๊ฐ์๊ฐ ์ ํด์ง์ง ์์ ํจ์๊ฐ ์์ต๋๋ค. ์ด๋ ๊ฒ ๋งค๋ฒ ํจ์์ ๋ค์ด๊ฐ๋ ์ธ์(argument)์ ๊ฐ์๊ฐ ๋ณํ
dojang.io
2. ์์ฑํด์ผ ํ ํจ์์ ๊ธธ์ด๊ฐ ์ง๊ธ๊น์ง ํด๋ดค๋ ํ๋ก์ ํธ๋ค ์ค์ ์ ์ผ ๊ธธ๋ค.
๋ค๋ฅธ ํจ์๋ค์ ๊ธธ์ด๋ดค์. file 3๊ฐ ์ ๋์์ ๋๋๋ ์์ค์ด์๋ ๊ฒฝ์ฐ๋ค์ด ๋ง์๋๋ฐ.
์ด๋ฒ์ ํ๋ ft_printf ๊ฐ์ ๊ฒฝ์ฐ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก 5๊ฐ ์ด์์ ์ฌ์ฉ์ ํด์ผ ํ ๊ฑฐ ๊ฐ์์, ๊ฑฑ์ ์ด ๋ง์ด ๋๋ค.
์์๋๋ฅผ ์ง์ ์์ฑ์ ํ๋์ง, ์๊ธธ ์ ์๋ ๋ฐ๋ก๋ค์ ์ฐ์ ์ ์ผ๋ก ์ ๊ฑฐํด์ ์์ฑ์ ํ๋์ง, ๊ทธ๋์ผ ํ ๊ฑฐ ๊ฐ๋ค.
3. ์๊ฐํด์ผ ํ๋ ํ๋๊ทธ๋ค์ด ๋ง๊ณ ๋ณต์กํ๋ค.
๊ทธ๋ฅ %d, %s, %c ๋ฑ ๋ง ๋ค์ด์๋ ๊ฒ์ด ์๋๋ผ. ’-0.*’ ๋ฑ ๋ค์ํ๊ฒ ์ ๊ฒฝ์ ์จ์ค์ผ ํ ๋ฐ๋ก๋ค์ด ๋ง์์,
๊ทธ ๋ถ๋ถ๋ค์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊ฒ์ธ์ง ๊น๊ฒ ์๊ฐ์ ํด๋ด์ผ ํ ๊ฑฐ ๊ฐ๋ค.
C ์ธ์ด ๋ ํผ๋ฐ์ค - printf ํจ์
modoocode.com
์ ์ ์๊ฐ๋๋ก ์ ์ ๊ธ์ด๋ผ ํ๋ฆฐ ๋ถ๋ถ์ด ์์์๋ ์์ต๋๋ค.
ํ๋ฆฐ๋ถ๋ถ์ด ๋ฐ๊ฒฌ๋๋ค๋ฉด ์ฌ์ํ ๋ถ๋ถ๋ค์ด๋ผ๋ ๊ผญ ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค!
'42seoul > projects' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Philosophers] ๊ฐ๋ ์ ๋ฆฌ (1) | 2021.09.04 |
---|---|
[Philosophers] ์ฌ์ฉ ํจ์ ์ ๋ฆฌ (1) | 2021.09.03 |
[ft_services] ๋ช ๋ น์ด ์ ๋ฆฌ (2) | 2021.09.02 |
[ft_services] ๊ฐ๋ ์ ๋ฆฌ (1) | 2021.09.01 |
[cub3D] ๊ตฌํ ๊ณผ์ ์ ์ ๋ฆฌ (4) | 2020.12.01 |