int printf(const char *format, ...);
ft_printf("%d, %s, %c", 123, 'a', "abc");
printf("%10.5s", "abcdefg");
1. precision 적용: [abcdefg] → [abcde]
precision과 len의 차이만큼 공백을 패딩해서 출력한다.
2. 위 숫자 전체와 width 비교: [abcde] → [ abcde]
width와 (len+패딩)의 차이만큼 blank를 출력한다.
1와 2에서 출력한 글자 수(cnt) 리턴
printf("%10.5d", 123);
1. itoa 적용: 숫자 123 → 문자열 "123"
2. precision 적용: [123] → [00123]
precision과 len의 차이만큼 0을 패딩해서 출력한다.
3. 위 숫자 전체와 width 비교: [00123] → [ 00123]
width와 (len+패딩)의 차이만큼 blank를 출력한다.
2와 3에서 출력한 글자 수(cnt) 리턴
flag에 따라 -가 다르게 붙어야하는 이유
ft_printf("%010d", -123); // -000000123
ft_printf("%010.d", -123); // -123
ft_printf("%010.1d", -123); // -123
ft_printf("%010.5d", -123); // -00123
ft_printf("%-10.5d", -123); // -00123
deepthought 결과
test_s: [ok]
test_d: [ok]
test_p: [ok]
test_x: [ok]
test_i: [ok]
test_u: [ok]
test_c: [ok]
test_mix: [ko]
[printf와 ft_printf에서 음수값이 다른 부분이 있었다.]
## no flag
printf("d: %d, d: %i \n", -2147483647, -214748);
ft_printf("d: %d, d: %i \n", -2147483647, -214748);
d: -2147483647, d: -214748
d: -7, d: -214748
-----------------------itoa 수정 후------------------------
d: -2147483647, d: -214748
d: -2147483647, d: -214748
## no prec, 5 width
printf("d: %5d, d: %5d \n", -2147483647, -214748);
ft_printf("d: %5d, d: %5d \n", -2147483647, -214748);
d: -2147483647, d: -214748
d: -7, d: -214748
-----------------------itoa 수정 후------------------------
d: -2147483647, d: -214748
d: -2147483647, d: -214748
## prec 5, no width
printf("d: %.5d, d: %.5d \n", -2147483647, -214748);
ft_printf("d: %.5d, d: %.5d \n", -2147483647, -214748);
d: -2147483647, d: -214748
d: -2147483647, d: -214748
## no prec, width 5 zero
printf("d: %05d, d: %05d \n", -2147483647, -214748);
ft_printf("d: %05d, d: %05d \n", -2147483647, -214748);
d: -2147483647, d: -214748
d: -2147483647, d: -214748
## no prec, width 5 minus
printf("d: %-5d, d: %-5d \n", -2147483647, -214748);
ft_printf("d: %-5d, d: %-5d \n", -2147483647, -214748);
d: -2147483647, d: -214748
d: -7 , d: -214748
-----------------------itoa 수정 후------------------------
d: -2147483647, d: -214748
d: -2147483647, d: -214748
1트 당시 pft 테스터기에서 문제 없었음.
[ 테스트 케이스의 값을 바꾸자 귀신같이 fail이 뜨기 시작했다. 아마 뮬리넷은 여기서 fail을 주지 않았을까 ]
[ type d ]
Test 191 (d_basic_neg) : FAILED.
First line of code: {return test("this %d number", -2147483647);}
expected output : "this -2147483647 number"
your output : "this -7 number"
expected (nonprintable as hex) : "this -2147483647 number"
actual (nonprintable as hex) : "this -7 number"
Test 202 (d_width_neg_exactfit) : FAILED.
First line of code: {return test("%5d", -2147483647);}
expected output : "-2147483647"
your output : " -7"
expected (nonprintable as hex) : "-2147483647"
actual (nonprintable as hex) : " -7"
Test 209 (d_width_neg_exactfit_lj) : FAILED.
First line of code: {return test("%-5d", -2147483647);}
expected output : "-2147483647"
your output : "-7 "
expected (nonprintable as hex) : "-2147483647"
actual (nonprintable as hex) : "-7 "
Test 211 (d_width_neg_nofit_lj) : FAILED.
First line of code: {return test("%-4d", -2147483647);}
expected output : "-2147483647"
your output : "-7 "
expected (nonprintable as hex) : "-2147483647"
actual (nonprintable as hex) : "-7 "
[type i]
Test 268 (i_basic_neg) : FAILED.
First line of code: {return test("this %i number", -2147483647);}
expected output : "this -2147483647 number"
your output : "this -7 number"
expected (nonprintable as hex) : "this -2147483647 number"
actual (nonprintable as hex) : "this -7 number"
Test 271 (i_basic_onlyneg) : FAILED.
First line of code: {return test("%i", -2147483647);}
expected output : "-2147483647"
your output : "-7"
expected (nonprintable as hex) : "-2147483647"
actual (nonprintable as hex) : "-7"
Test 286 (i_width_neg_exactfit_lj) : FAILED.
First line of code: {return test("%-5i", -2147483647);}
expected output : "-2147483647"
your output : "-7 "
expected (nonprintable as hex) : "-2147483647"
actual (nonprintable as hex) : "-7 "
[printf 결과값]
d: -1, i: -1
d: -11, i: -11
d: -111, i: -111
d: -1111, i: -1111
d: -11111, i: -11111
d: -111111, i: -111111
d: -1111111, i: -1111111
d: -11111111, i: -11111111
d: -111111111, i: -111111111
d: -1111111111, i: -1111111111
[ft_printf 결과값]
d: -1, i: -1
d: -11, i: -11
d: -111, i: -111
d: -1111, i: -1111
d: -11111, i: -11111
d: -111111, i: -111111
d: -1111111, i: -1111111
d: -11111111, i: -11111111
d: -1, i: -1 // 터짐
d: -1, i: -1 // 터짐
[pft 테스터기]
./test d: Tests completed. 80/80 tests passed.
./test i: Tests completed. 77/77 tests passed.
[출력 값]
d: -1, i: -1
d: -11, i: -11
d: -111, i: -111
d: -1111, i: -1111
d: -11111, i: -111111
d: -1111111, i: -1111111
d: -11111111, i: -11111111
d: -111111111, i: -111111111
d: -1111111111, i: -1111111111