From 12f296e92626fd423ded32348826d7de5a21cf69 Mon Sep 17 00:00:00 2001 From: Hugo LAMY Date: Wed, 18 Dec 2019 17:59:54 +0100 Subject: [PATCH 1/5] main de test des va args --- ft_printf.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 ft_printf.c diff --git a/ft_printf.c b/ft_printf.c new file mode 100644 index 0000000..d74b119 --- /dev/null +++ b/ft_printf.c @@ -0,0 +1,43 @@ +#include + +int ft_printf(char *fmt, ...) +{ + va_list ap; + int d; + char c, *s; + + va_start(ap, fmt); + while (*fmt) + switch(*fmt++) { + case 's': /* string */ + s = va_arg(ap, char *); + printf("string %s\n", s); + break; + case 'd': /* int */ + d = va_arg(ap, int); + printf("int %d\n", d); + break; + case 'c': /* char */ + /* Note: char is promoted to int. */ + c = va_arg(ap, int); + printf("char %c\n", c); + break; + } + va_end(ap); + return (0); +} + +int main(void) +{ + char *s; + char *str; + char c; + int i; + + s = "scd"; + str = "bravo"; + c = 'y'; + i = 6; + ft_printf(s, str, c, i); + return (0); +} From de9054b9d78f0ffff64ca7e53e064627a86aabda Mon Sep 17 00:00:00 2001 From: Hugo LAMY Date: Wed, 18 Dec 2019 23:46:07 +0100 Subject: [PATCH 2/5] mise en place des tests de main et explication de printf --- .gitignore | 1 + ft_printf.c | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 101 insertions(+) diff --git a/.gitignore b/.gitignore index 088e750..39ceb85 100644 --- a/.gitignore +++ b/.gitignore @@ -53,6 +53,7 @@ dkms.conf # OS generated files # *.swp +*.swo .DS_Store .DS_Store? ._* diff --git a/ft_printf.c b/ft_printf.c index d74b119..e921e8f 100644 --- a/ft_printf.c +++ b/ft_printf.c @@ -1,4 +1,5 @@ #include +#include int ft_printf(char *fmt, ...) { @@ -39,5 +40,104 @@ int main(void) c = 'y'; i = 6; ft_printf(s, str, c, i); + printf("\n", s, str, c, i); + ft_printf("\n", ); + printf("\n", ); + ft_printf("\n", ); + printf("\n", ); + ft_printf("\n", ); + printf("\n", ); + ft_printf("\n", ); + printf("\n", ); + ft_printf("\n", ); + printf("\n", ); + ft_printf("\n", ); + printf("\n", ); + ft_printf("\n", ); + printf("\n", ); + ft_printf("\n", ); + printf("\n", ); + ft_printf("\n", ); + printf("\n", ); + ft_printf("\n", ); + printf("\n", ); + ft_printf("\n", ); + printf("\n", ); + ft_printf("\n", ); + printf("\n", ); + ft_printf("\n", ); + printf("\n", ); + ft_printf("\n", ); + printf("\n", ); + ft_printf("\n", ); + printf("\n", ); + ft_printf("\n", ); + printf("\n", ); + ft_printf("\n", ); + printf("\n", ); return (0); } + + // usage : + // %[flags][width][.precision][length]specifier + // + // [specifiers] + // c character + // s string of characters + // p pointer adress + // d (or i) signed decimal integer + // i (or d) signed decimal integer + // u unsigned decimal integer + // x unsigned hexadecimal integer + // X unsigned hexadecimal integer (capital letters) + //( n nothing printed + //( f decimal floating point + //( g uses the shorter of %e or %f + //( e scientific notation (mantissa/exponent) using e + //((E scientific notation (mantissa/exponent) using E + //((G uses the shorter of %E or %f + //((o signed octal + // + // [flags] + // - left-justify within the given field width + // 0 left-pads the number with zeroes (0) instead of spaces, where + // padding is specified (see width sub-specifier) + //( + forces to precede the result with a plus or minus sign even for + // positive numbers) + //( (space) if no sign is going to be written, a blank space is inserted + // before the value) + //( # used with o, x or X specifiers the value is preceded with 0, 0x + // or 0X respectively for values different than zero. Used with e, + // E and f, it forces the written output to contain a decimal point + // even if no digits would follow. By default, if no digits follow, + // no decimal point is written. Used with g or G the reult is the + // same as with e or E but trailing zeros are not removed) + // + // [width] + // (nbr) minimum number of characters to be printed. if the value to be + // printed is shorter than this number, the result is padded with + // blank spaces. The value is not truncated even if the result is + // larger + // * the width is not specified in the format string, but as an + // additional integer value arguement preceding the argument that + // has to be formatted + // + // [.precision] + // .nbr fot integer specifiers (d,i,o,x,X) - precision specifies the + // minimum number of digits to be written. If the value to be + // written is shorter than this number, the result is padded with + // leading zeros. The value is not truncated even if the result is + // longer. A precision of 0 means that no character is written for + // the value 0. For e, E and f specifiers − this is the number of + // digits to be printed after the decimal point. For g and G + // specifiers − This is the maximum number of significant digits + // to be printed. For s − this is the maximum number of characters + // to be printed. By default all characters are printed until the + // ending null character is encountered. For c type − it has no + // effect. When no precision is specified, the default is 1. If the + // period is specified without an explicit value for precision, 0 + // is assumed + // .* the precision is not specified in the format string, but as an + // additional integer value argument preceding the argument that + // has to be formated + // From 9722d8a381b2afadc870efce5e7a0c57bc2c63d8 Mon Sep 17 00:00:00 2001 From: Hugo LAMY Date: Thu, 19 Dec 2019 00:15:55 +0100 Subject: [PATCH 3/5] ecriture premiers tests simples --- ft_printf.c | 80 +++++++++++++++++++++++++++++------------------------ 1 file changed, 44 insertions(+), 36 deletions(-) diff --git a/ft_printf.c b/ft_printf.c index e921e8f..afa26cf 100644 --- a/ft_printf.c +++ b/ft_printf.c @@ -37,44 +37,52 @@ int main(void) s = "scd"; str = "bravo"; - c = 'y'; + c = 'c'; i = 6; ft_printf(s, str, c, i); - printf("\n", s, str, c, i); - ft_printf("\n", ); - printf("\n", ); - ft_printf("\n", ); - printf("\n", ); - ft_printf("\n", ); - printf("\n", ); - ft_printf("\n", ); - printf("\n", ); - ft_printf("\n", ); - printf("\n", ); - ft_printf("\n", ); - printf("\n", ); - ft_printf("\n", ); - printf("\n", ); - ft_printf("\n", ); - printf("\n", ); - ft_printf("\n", ); - printf("\n", ); - ft_printf("\n", ); - printf("\n", ); - ft_printf("\n", ); - printf("\n", ); - ft_printf("\n", ); - printf("\n", ); - ft_printf("\n", ); - printf("\n", ); - ft_printf("\n", ); - printf("\n", ); - ft_printf("\n", ); - printf("\n", ); - ft_printf("\n", ); - printf("\n", ); - ft_printf("\n", ); - printf("\n", ); + + // ft_printf("[simple str sans newline]"); + printf(" simple str sans newline "); + // ft_printf("[simple str avec newline]\n"); + printf(" simple str avec newline \n"); + // ft_printf("[impression d'un %%]\n"); + printf(" impression d'un %% \n"); + // ft_printf("[%%c : %c]\n", 'c'); + printf(" %%c : %c \n", 'c'); + // ft_printf("[%%s : %s]\n", "string"); + printf(" %%s : %s \n", "string"); + // ft_printf("[%%p : %p]\n", str); + printf(" %%p : %p \n", str); + // ft_printf("[%%d : %d]\n", 456); + printf(" %%d : %d \n", 456); + // ft_printf("[%%i : %i]\n", 846); + printf(" %%i : %i \n", 846); + // ft_printf("[%%u : %u]\n", 87); + printf(" %%u : %u \n", 87); + // ft_printf("[%%u (neg): %u]\n", -87); + printf(" %%u (neg): %u \n", -87); + // ft_printf("[%%x (78) : %x]\n", 78); + printf(" %%x (78) : %x \n", 78); + // ft_printf("[%%X (78) : %X]\n", 78); + printf(" %%X (78) : %X \n", 78); + +// printf("\nBONUS:\n"); +// // ft_printf("%n\n", ); +// printf("%n\n", ); +// // ft_printf("%f\n", ); +// printf("%f\n", ); +// // ft_printf("%g\n", ); +// printf("%g\n", ); +// // ft_printf("%e\n", ); +// printf("%e\n", ); + +// printf("\nADD:\n"); +// // ft_printf("%E\n", ); +// printf("%E\n", ); +// // ft_printf("%G\n", ); +// printf("%G\n", ); +// // ft_printf("%o\n", ); +// printf("%o\n", ); return (0); } From 7c9c109d9500894879e998a30f8edf2787deede2 Mon Sep 17 00:00:00 2001 From: Hugo LAMY Date: Wed, 1 Jan 2020 18:56:10 +0100 Subject: [PATCH 4/5] pas mal de tests mis en forme --- ft_printf.c | 118 ++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 91 insertions(+), 27 deletions(-) diff --git a/ft_printf.c b/ft_printf.c index afa26cf..1112d16 100644 --- a/ft_printf.c +++ b/ft_printf.c @@ -40,42 +40,106 @@ int main(void) c = 'c'; i = 6; ft_printf(s, str, c, i); + printf("\n"); - // ft_printf("[simple str sans newline]"); - printf(" simple str sans newline "); - // ft_printf("[simple str avec newline]\n"); - printf(" simple str avec newline \n"); - // ft_printf("[impression d'un %%]\n"); - printf(" impression d'un %% \n"); - // ft_printf("[%%c : %c]\n", 'c'); - printf(" %%c : %c \n", 'c'); - // ft_printf("[%%s : %s]\n", "string"); - printf(" %%s : %s \n", "string"); - // ft_printf("[%%p : %p]\n", str); - printf(" %%p : %p \n", str); - // ft_printf("[%%d : %d]\n", 456); - printf(" %%d : %d \n", 456); - // ft_printf("[%%i : %i]\n", 846); - printf(" %%i : %i \n", 846); - // ft_printf("[%%u : %u]\n", 87); - printf(" %%u : %u \n", 87); - // ft_printf("[%%u (neg): %u]\n", -87); - printf(" %%u (neg): %u \n", -87); - // ft_printf("[%%x (78) : %x]\n", 78); - printf(" %%x (78) : %x \n", 78); - // ft_printf("[%%X (78) : %X]\n", 78); - printf(" %%X (78) : %X \n", 78); + printf("-----------------------------------------------\n"); + printf("- BASICS -\n"); + printf("- -\n"); + printf("- %%[flag][width][.precision][length]specifier -\n"); + printf("- -\n"); + printf("- conversions : cspdiuxX%% -\n"); + printf("- flags : -0.* -\n"); + printf("- taille de champ minimale -\n"); + printf("- -\n"); + printf("- char *str = \"bravo\"; -\n"); + printf("- char c = 'c'; -\n"); + printf("- int i = 6; -\n"); + printf("-----------------------------------------------\n"); + printf("-----------------------------------------------\n"); + printf("- conversions : cspdiuxX%% -\n"); + printf("-----------------------------------------------\n\n"); + + printf("(\"no newline\") ft : "); printf("no newline"); printf("-->ligne suivante\n"); printf("\n"); + + printf("(\"newline\\n\") ft : "); printf("newline\n"); printf("-->ligne suivante\n"); printf("\n"); + + printf("(\"%%%%\") ft : "); printf("%%\n"); printf("\n"); + + printf("(\"\\\"\") ft : "); printf("\"\n"); printf("\n"); + + printf("(\"%%c\",'c') ft : "); printf("%c\n", 'c'); printf("\n"); + + printf("(\"%%s\",\"str\") ft : "); printf("%s\n", "str"); printf("\n"); + + printf("(\"%%s\",str) ft : "); printf("%s\n", str); printf("\n"); + + printf("(\"%%p\",str) ft : "); printf("%p\n", str); printf("\n"); + + printf("(\"%%d\",456) ft : "); printf("%d\n", 456); printf("\n"); + + printf("(\"%%i\",846) ft : "); printf("%i\n", 846); printf("\n"); + + printf("(\"%%u\",87) ft : "); printf("%u\n", 87); printf("\n"); + + printf("(\"%%u\",-87) ft : "); printf("%u\n", -87); printf("\n"); + + printf("(\"%%x\",78) ft : "); printf("%x\n", 78); printf("\n"); + + printf("(\"%%X\",78) ft : "); printf("%X\n", 78); printf("\n"); + + printf("-----------------------------------------------\n"); + printf("- flags : -0.* -\n"); + printf("-----------------------------------------------\n\n"); + + // printf("(\"%%3s\",\"a\") ft : "); ft_printf("'%3s'\n", "a"); + printf("(\"%%3s\",\"a\") : "); printf("'%3s'\n", "a"); printf("\n"); + + // printf("(\"%%-3s\",\"a\") ft : "); ft_printf("'%-3s'\n]", "a"); + printf("(\"%%-3s\",\"a\") : "); printf("'%-3s'\n ", "a"); printf("\n"); + + // printf("(\"%%-9s\",\"a\") ft : "); ft_printf("'%-9s'\n]", "a"); + printf("(\"%%-9s\",\"a\") : "); printf("'%-9s'\n ", "a"); printf("\n"); + + // printf("(\"%%-1s\",\"ab\") ft : "); ft_printf("'%-1s'\n]", "ab"); + printf("(\"%%-1s\",\"ab\") : "); printf("'%-1s'\n ", "ab"); printf("\n"); + + // printf("(\"%%-2s\",\"ab\") ft : "); ft_printf("'%-2s'\n]", "ab"); + printf("(\"%%-2s\",\"ab\") : "); printf("'%-2s'\n ", "ab"); printf("\n"); + + // printf("(\"%%-3s\",\"ab\") ft : "); ft_printf("'%-3s'\n]", "ab"); + printf("(\"%%-3s\",\"ab\") : "); printf("'%-3s'\n ", "ab"); printf("\n"); + + // printf("(\"%%-3i\",3) ft : "); ft_printf("'%-3i'\n", 3);printf(""); + printf("(\"%%-3i\",3) : "); printf("'%-3i'\n", 3); printf("\n"); + + // printf("(\"%%-3i\",123456) ft : "); ft_printf("'%-3i'\n", 123456); + printf("(\"%%-3i\",123456) : "); printf("'%-3i'\n", 123456); printf("\n"); + + // printf("(\"%%03i\",1) ft : "); ft_printf("'%03i'\n", 1); + printf("(\"%%03i\",1) : "); printf("'%03i'\n", 1); printf("\n"); + + // printf("(\"%%*i\",3,1) ft : "); ft_printf("'%*i'\n", 3, 1); + printf("(\"%%*i\",3,1) : "); printf("'%*i'\n", 3, 1); printf("\n"); + + // printf("(\"%%-*i\",3,1) ft : "); ft_printf("'%-*i'\n", 3, 1);printf(""); + printf("(\"%%-*i\",3,1) : "); printf("'%-*i'\n", 2, 1); printf("\n"); + + printf("-----------------------------------------------\n"); + printf("- BONUS -\n"); + printf("- conversions : nfge -\n"); + printf("- flags : l ll h hh # ' + -\n"); + printf("-----------------------------------------------\n\n"); // printf("\nBONUS:\n"); // // ft_printf("%n\n", ); -// printf("%n\n", ); +// printf("%n\n"); // // ft_printf("%f\n", ); // printf("%f\n", ); // // ft_printf("%g\n", ); // printf("%g\n", ); // // ft_printf("%e\n", ); // printf("%e\n", ); - +// // printf("\nADD:\n"); // // ft_printf("%E\n", ); // printf("%E\n", ); @@ -127,7 +191,7 @@ int main(void) // blank spaces. The value is not truncated even if the result is // larger // * the width is not specified in the format string, but as an - // additional integer value arguement preceding the argument that + // additional integer value argument preceding the argument that // has to be formatted // // [.precision] From e68938441c3d5c84db04618442a208d09df0bbc2 Mon Sep 17 00:00:00 2001 From: Hugo LAMY Date: Wed, 1 Jan 2020 19:52:52 +0100 Subject: [PATCH 5/5] streniownf --- ft_printf.c | 53 ++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 38 insertions(+), 15 deletions(-) diff --git a/ft_printf.c b/ft_printf.c index 1112d16..27f147b 100644 --- a/ft_printf.c +++ b/ft_printf.c @@ -59,33 +59,47 @@ int main(void) printf("- conversions : cspdiuxX%% -\n"); printf("-----------------------------------------------\n\n"); - printf("(\"no newline\") ft : "); printf("no newline"); printf("-->ligne suivante\n"); printf("\n"); + // printf("(\"no newline\") ft : "); ft_printf("no newline"); printf("-->ligne suivante\n"); + printf("(\"no newline\") : "); printf("no newline"); printf("-->ligne suivante\n"); printf("\n"); - printf("(\"newline\\n\") ft : "); printf("newline\n"); printf("-->ligne suivante\n"); printf("\n"); + // printf("(\"newline\\n\") ft : "); ft_printf("newline\n"); printf("-->ligne suivante\n"); + printf("(\"newline\\n\") : "); printf("newline\n"); printf("-->ligne suivante\n"); printf("\n"); - printf("(\"%%%%\") ft : "); printf("%%\n"); printf("\n"); + // printf("(\"%%%%\") ft : "); ft_printf("%%\n"); + printf("(\"%%%%\") : "); printf("%%\n"); printf("\n"); - printf("(\"\\\"\") ft : "); printf("\"\n"); printf("\n"); + // printf("(\"\\\"\") ft : "); ft_printf("\"\n"); + printf("(\"\\\"\") : "); printf("\"\n"); printf("\n"); - printf("(\"%%c\",'c') ft : "); printf("%c\n", 'c'); printf("\n"); + // printf("(\"%%c\",'c') ft : "); ft_printf("%c\n", 'c'); + printf("(\"%%c\",'c') : "); printf("%c\n", 'c'); printf("\n"); - printf("(\"%%s\",\"str\") ft : "); printf("%s\n", "str"); printf("\n"); + // printf("(\"%%s\",\"str\") ft : "); ft_printf("%s\n", "str"); + printf("(\"%%s\",\"str\") : "); printf("%s\n", "str"); printf("\n"); - printf("(\"%%s\",str) ft : "); printf("%s\n", str); printf("\n"); + // printf("(\"%%s\",str) ft : "); ft_printf("%s\n", str); + printf("(\"%%s\",str) : "); printf("%s\n", str); printf("\n"); - printf("(\"%%p\",str) ft : "); printf("%p\n", str); printf("\n"); + // printf("(\"%%p\",str) ft : "); ft_printf("%p\n", str); + printf("(\"%%p\",str) : "); printf("%p\n", str); printf("\n"); - printf("(\"%%d\",456) ft : "); printf("%d\n", 456); printf("\n"); + // printf("(\"%%d\",456) ft : "); ft_printf("%d\n", 456); + printf("(\"%%d\",456) : "); printf("%d\n", 456); printf("\n"); - printf("(\"%%i\",846) ft : "); printf("%i\n", 846); printf("\n"); + // printf("(\"%%i\",846) ft : "); ft_printf("%i\n", 846); + printf("(\"%%i\",846) : "); printf("%i\n", 846); printf("\n"); - printf("(\"%%u\",87) ft : "); printf("%u\n", 87); printf("\n"); + // printf("(\"%%u\",87) ft : "); ft_printf("%u\n", 87); + printf("(\"%%u\",87) : "); printf("%u\n", 87); printf("\n"); - printf("(\"%%u\",-87) ft : "); printf("%u\n", -87); printf("\n"); + // printf("(\"%%u\",-87) ft : "); ft_printf("%u\n", -87); + printf("(\"%%u\",-87) : "); printf("%u\n", -87); printf("\n"); - printf("(\"%%x\",78) ft : "); printf("%x\n", 78); printf("\n"); + // printf("(\"%%x\",78) ft : "); ft_printf("%x\n", 78); + printf("(\"%%x\",78) : "); printf("%x\n", 78); printf("\n"); - printf("(\"%%X\",78) ft : "); printf("%X\n", 78); printf("\n"); + // printf("(\"%%X\",78) ft : "); ft_printf("%X\n", 78); + printf("(\"%%X\",78) : "); printf("%X\n", 78); printf("\n"); printf("-----------------------------------------------\n"); printf("- flags : -0.* -\n"); @@ -118,11 +132,20 @@ int main(void) // printf("(\"%%03i\",1) ft : "); ft_printf("'%03i'\n", 1); printf("(\"%%03i\",1) : "); printf("'%03i'\n", 1); printf("\n"); + // printf("(\"%%-03i\",1) ft : "); ft_printf("'%-03i'\n", 1); + printf("(\"%%-03i\",1) : "); printf("'%-03i'\n", 1); printf("\n"); + + // printf("(\"%%010s\",str) ft : "); ft_printf("'%010s'\n", str); + printf("(\"%%010s\",str) : "); printf("'%010s'\n", str); printf("\n"); + + // printf("(\"%%-010s\",str) ft : "); ft_printf("'%-010s'\n", str); + printf("(\"%%-010s\",str) : "); printf("'%-010s'\n", str); printf("\n"); + // printf("(\"%%*i\",3,1) ft : "); ft_printf("'%*i'\n", 3, 1); printf("(\"%%*i\",3,1) : "); printf("'%*i'\n", 3, 1); printf("\n"); // printf("(\"%%-*i\",3,1) ft : "); ft_printf("'%-*i'\n", 3, 1);printf(""); - printf("(\"%%-*i\",3,1) : "); printf("'%-*i'\n", 2, 1); printf("\n"); + printf("(\"%%-*i\",3,1) : "); printf("'%-*i'\n", 3, 1); printf("\n"); printf("-----------------------------------------------\n"); printf("- BONUS -\n");