diff --git a/ft_printf.h b/ft_printf.h index 5010753..791a4d2 100644 --- a/ft_printf.h +++ b/ft_printf.h @@ -6,7 +6,7 @@ /* By: hulamy +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/27 12:07:47 by hulamy #+# #+# */ -/* Updated: 2020/03/10 16:26:47 by hulamy ### ########.fr */ +/* Updated: 2020/03/12 20:35:10 by hulamy ### ########.fr */ /* */ /* ************************************************************************** */ @@ -62,5 +62,6 @@ char *ft_flag_transform(char *s, char *print, char *type, int *size); char *ft_plus(char *s, char *print, char *type); char *ft_sharp(char *s, char *print, char *type); char *ft_sharp_again(char *s, char *print, char *type); +char *ft_space(char *s, char *print, char *type, int *size); #endif diff --git a/main.c b/main.c index 5ed0ee6..b20e015 100644 --- a/main.c +++ b/main.c @@ -391,10 +391,12 @@ int main(int ac, char **av) // PRINT("%05.d - %05.0d - %05.1d - %05.2d - %05.3d - %05.4d - %05.5d - %05.6d", 123, 123, 123, 123, 123, 123, 123, 123) // PRINT("%06.d - %06.0d - %06.1d - %06.2d - %06.3d - %06.4d - %06.5d - %06.6d", 123, 123, 123, 123, 123, 123, 123, 123) -// PRINT(diuxXcsp) -// PRINT(h hh l ll) -// PRINT(0-) -// PRINT(#' +) + // (diuxXcsp) + // (h hh l ll) + // (0-) + // (#' +) + + // PRINT("%+10.7i % 010i %-#7.10x %7p %10c %7.10s", 122, -122, 122, "122", 122, "-122") } /* ////////////////////////////////////////////////////////////////// */ @@ -895,6 +897,7 @@ int main(int ac, char **av) printf("flag '#'\n"); printf("----------------------------------------------------------------\n\n"); + unsigned int uu = 4; PRINT("%#X", 8645); PRINT("%#.7X", 8645); PRINT("%#010.7X", 8645); @@ -903,10 +906,19 @@ int main(int ac, char **av) PRINT("%#.10X", 8645); PRINT("%#10.10X", 8645); PRINT("%#010X", 8645); - unsigned int uu = 4; PRINT("%#X", (unsigned int)&uu) PRINT("%#x", (unsigned int)&uu) PRINT("%#lx", (unsigned long int)&uu) + + PRINT("%-#X", 8645); + PRINT("%-#.7X", 8645); + PRINT("%-#10.7X", 8645); + PRINT("%-#10X", 8645); + PRINT("%-#.10X", 8645); + PRINT("%-#10.10X", 8645); + PRINT("%-#X", (unsigned int)&uu) + PRINT("%-#x", (unsigned int)&uu) + PRINT("%-#lx", (unsigned long int)&uu) } if (ac == 2 || !strcmp(av[2], "'")) @@ -949,6 +961,24 @@ int main(int ac, char **av) PRINT("% 05.4d", 12); PRINT("% 010d", 645); PRINT("% 010d", -645); + + PRINT("%- d", 12); + PRINT("%- d", -12); + PRINT("%- 5d", 12); + PRINT("%- 5d", -12); + PRINT("%- 1d", -12); + PRINT("%- 2d", -12); + PRINT("%- 3d", -12); + PRINT("%- 4d", -12); + PRINT("%- 1d", 12); + PRINT("%- 2d", 12); + PRINT("%- 3d", 12); + PRINT("%- 4d", 12); + PRINT("%- .4d", 12); + PRINT("%- 3.4d", 12); + PRINT("%- 5.4d", -12); + PRINT("%- 5.4d", 12); + PRINT("%- 8d", 645); } if (ac == 2 || !strcmp(av[2], "+")) @@ -1044,8 +1074,8 @@ int main(int ac, char **av) printf("----------------------------------------------------------------\n\n"); PRINT("%i", 33333); - PRINT("%.0f", 33333.0); - PRINT("%#.0f", 33333.0); + // PRINT("%.0f", 33333.0); + // PRINT("%#.0f", 33333.0); PRINT("%08i", 33333); PRINT("%-8i", 33333); PRINT("%+i", 33333); @@ -1056,9 +1086,9 @@ int main(int ac, char **av) printf("'0' and '-' not compatible -------------------------------------\n\n"); PRINT("%0000i", 33333); - PRINT("%0#.0f", 33333.0); - PRINT("%#0.0f", 33333.0); - PRINT("%0#0.0f", 33333.0); + // PRINT("%0#.0f", 33333.0); + // PRINT("%#0.0f", 33333.0); + // PRINT("%0#0.0f", 33333.0); PRINT("%0+8i", 33333); PRINT("%+08i", 33333); PRINT("%0+08i", 33333); @@ -1073,9 +1103,9 @@ int main(int ac, char **av) printf("'0' and '-' not compatible -------------------------------------\n\n"); PRINT("%----i", 33333); - PRINT("%-#.0f", 33333.0); - PRINT("%#-.0f", 33333.0); - PRINT("%-#-.0f", 33333.0); + // PRINT("%-#.0f", 33333.0); + // PRINT("%#-.0f", 33333.0); + // PRINT("%-#-.0f", 33333.0); PRINT("%-+8i", 33333); PRINT("%+-8i", 33333); PRINT("%-+-8i", 33333); @@ -1088,29 +1118,29 @@ int main(int ac, char **av) printf("\nrepetition of flag '#' -----------------------------------------\n"); - PRINT("%####f", 33333.0); - PRINT("%#+.0f", 33333.0); - PRINT("%+#.0f", 33333.0); - PRINT("%#+#.0f", 33333.0); - PRINT("%#08f", 33333.0); - PRINT("%0#8f", 33333.0); - PRINT("%#0#8f", 33333.0); - PRINT("%#-8f", 33333.0); - PRINT("%-#8f", 33333.0); - PRINT("%#-#8f", 33333.0); - PRINT("%#'f", 33333.0); - PRINT("%'#f", 33333.0); - PRINT("%#'#f", 33333.0); - PRINT("%# f", 33333.0); - PRINT("% #f", 33333.0); - PRINT("%# #f", 33333.0); + // PRINT("%####f", 33333.0); + // PRINT("%#+.0f", 33333.0); + // PRINT("%+#.0f", 33333.0); + // PRINT("%#+#.0f", 33333.0); + // PRINT("%#08f", 33333.0); + // PRINT("%0#8f", 33333.0); + // PRINT("%#0#8f", 33333.0); + // PRINT("%#-8f", 33333.0); + // PRINT("%-#8f", 33333.0); + // PRINT("%#-#8f", 33333.0); + // PRINT("%#'f", 33333.0); + // PRINT("%'#f", 33333.0); + // PRINT("%#'#f", 33333.0); + // PRINT("%# f", 33333.0); + // PRINT("% #f", 33333.0); + // PRINT("%# #f", 33333.0); printf("\nrepetition of flag ''' -----------------------------------------\n\n"); PRINT("%''''i", 33333); - PRINT("%'#.0f", 33333.0); - PRINT("%#'.0f", 33333.0); - PRINT("%'#'.0f", 33333.0); + // PRINT("%'#.0f", 33333.0); + // PRINT("%#'.0f", 33333.0); + // PRINT("%'#'.0f", 33333.0); PRINT("%'08i", 33333); PRINT("%0'8i", 33333); PRINT("%'0'8i", 33333); @@ -1128,9 +1158,9 @@ int main(int ac, char **av) printf("'+' and ' ' not compatible -------------------------------------\n\n"); PRINT("% i", 33333); - PRINT("% #.0f", 33333.0); - PRINT("%# .0f", 33333.0); - PRINT("% # .0f", 33333.0); + // PRINT("% #.0f", 33333.0); + // PRINT("%# .0f", 33333.0); + // PRINT("% # .0f", 33333.0); PRINT("% 08i", 33333); PRINT("%0 8i", 33333); PRINT("% 0 8i", 33333); @@ -1145,9 +1175,9 @@ int main(int ac, char **av) printf("'+' and ' ' not compatible -------------------------------------\n\n"); PRINT("%++++i", 33333); - PRINT("%+#.0f", 33333.0); - PRINT("%#+.0f", 33333.0); - PRINT("%+#+.0f", 33333.0); + // PRINT("%+#.0f", 33333.0); + // PRINT("%#+.0f", 33333.0); + // PRINT("%+#+.0f", 33333.0); PRINT("%+08i", 33333); PRINT("%0+8i", 33333); PRINT("%+0+8i", 33333); diff --git a/outf.txt b/outf.txt index 66ab03d..bd62a51 100644 --- a/outf.txt +++ b/outf.txt @@ -1 +1 @@ - 123 - 123 - 123 - 123 - 123 - 0123 - 00123 - 000123 +0x7ffee2d2e8a8 diff --git a/outft.txt b/outft.txt index 66ab03d..bd62a51 100644 --- a/outft.txt +++ b/outft.txt @@ -1 +1 @@ - 123 - 123 - 123 - 123 - 123 - 0123 - 00123 - 000123 +0x7ffee2d2e8a8 diff --git a/srcs/ft_flag_transform.c b/srcs/ft_flag_transform.c index a1fc16d..5d2a616 100644 --- a/srcs/ft_flag_transform.c +++ b/srcs/ft_flag_transform.c @@ -65,10 +65,10 @@ char *ft_precision(char *s, char *print, char *type) if ((tmp = ft_strchr(s, '.'))) { precision = ft_atoi(tmp + 1); - *tmp = '\0'; +// *tmp = '\0'; while (*s && ft_strchr("#- +'0", *(++s))) if (*s == '0') - *s = '.'; + *s = '/'; i = 0; if (precision == 0 && !ft_strcmp(print, "0")) print[0] = '\0'; @@ -146,9 +146,9 @@ char *ft_width(char *s, char *print, int *size, char *type) zero = 0; if (print[0] == '\0' && ft_strchr(type, 'c')) zero = 1; - while (*tmp != '\0' && ft_strchr("%#- +'0.", *tmp)) + while (*tmp != '\0' && ft_strchr("%#- +'0/", *tmp)) tmp++; - if (*tmp == '\0') + if (*tmp == '\0' || *tmp == '.') { *size = ft_strlen(print) + zero; return (print); @@ -159,6 +159,7 @@ char *ft_width(char *s, char *print, int *size, char *type) print = width_flags(print, s, *size, zero); else *size = ft_strlen(print) + zero; + tmp[0] = '1'; return (print); } @@ -179,6 +180,7 @@ char *ft_flag_transform(char *s, char *print, char *type, int *size) print = ft_sharp(s, print, type); print = ft_width(s, print, size, type); print = ft_sharp_again(s, print, type); + print = ft_space(s, print, type, size); if (ft_strchr(type, 'p')) { print = ft_concat_free(ft_strdup("0x"), print); diff --git a/srcs/ft_flag_transform_bonus.c b/srcs/ft_flag_transform_bonus.c index c59ca31..6d803b2 100644 --- a/srcs/ft_flag_transform_bonus.c +++ b/srcs/ft_flag_transform_bonus.c @@ -37,3 +37,27 @@ char *ft_sharp_again(char *s, char *print, char *type) return (print); } +char *ft_space(char *s, char *print, char *type, int *size) +{ + int i = 0; + + if (print[0] == ' ' || !ft_strchr(s, ' ') || !ft_strchrset(type, "diuxX")) + return (print); + while (print[i] == ' ') + i++; + if (print[i] == '-' || print[i] == '+') + return (print); + if (ft_strchr(s, '.') || (i == 0 && print[i] != '0')) + { + print = ft_concat_free(ft_strdup(" "), print); + *size += 1; + } + else + print[i] = ' '; + if (ft_strchr(s, '-') && print[*size - 1] == ' ') + { + print[*size] = '\0'; + *size -= 1; + } + return (print); +}