diff --git a/ft_printf.c b/ft_printf.c index 484c7b0..57dc1a2 100644 --- a/ft_printf.c +++ b/ft_printf.c @@ -204,25 +204,16 @@ int main(void) return (0); } - // usage : - // %[flags][width][.precision][length]specifier + // conversions : cspdiuxX%% + // flags : -0.* + // conversions : nfge + // flags : l ll h hh # ' + // - // [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 + // usage : + // %[arg_nbr$][flags][][width][.precision][length]specifier + // + // [arg_nbr] + //( nbr$ specify the argument to access, they are numbered starting at 1 // // [flags] // - left-justify within the given field width @@ -232,12 +223,38 @@ int main(void) // 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) + //( # (o, x, X, a, A, e, E, f, F, g, G) used with (o, x or X) the + // value is preceded with 0, 0x or 0X for values different than + // zero. used with (e, E or 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 result is the same as with e or E but trailing + // zeros are not removed + //( ' (d, u, i, f, F) used with d, u or i, or the integral portion of + // a float f or F, the decimal conversions are printed by groups of + // thousands separated by the non-monetary separator returned by + // localeconv(3) (ex 123456789 -> 123,456,789) + // + // + // [specifiers] + // c char character + // s *char string of characters + // p * pointer adress + // d int (or i) signed decimal integer + // i int (or d) signed decimal integer + // u int unsigned decimal integer + // x int unsigned hexadecimal integer + // X int unsigned hexadecimal integer (capital letters) + //( n *int nothing printed + //( f float decimal floating point + //( e float scientific notation (mantissa/exponent) using e + //( g float uses the shorter of %e or %f + //((E float scientific notation (mantissa/exponent) using E + //((G float uses the shorter of %E or %f + //((o int signed octal + //((C char wide character + //((a float + //((S *char string of wide characters // // [width] // (nbr) minimum number of characters to be printed. if the value to be diff --git a/main.c b/main.c index c864fa8..4dabe35 100644 --- a/main.c +++ b/main.c @@ -1,32 +1,128 @@ -#include "printf.h" +#include +#include -int main(int ac, char **av) +int main(void) { - if (ac < 2) - return (0); - if (ac == 2) - ft_printf(av[1]); - if (ac == 3) - ft_printf(av[1], av[2]); - if (ac == 4) - ft_printf(av[1], av[2], av[3]); - if (ac == 5) - ft_printf(av[1], av[2], av[3], av[4]); - if (ac == 6) - ft_printf(av[1], av[2], av[3], av[4], av[5]); - if (ac == 7) - ft_printf(av[1], av[2], av[3], av[4], av[5], av[6]); - if (ac == 8) - ft_printf(av[1], av[2], av[3], av[4], av[5], av[6], av[7]); - if (ac == 9) - ft_printf(av[1], av[2], av[3], av[4], av[5], av[6], av[7], av[8]); - if (ac == 10) - ft_printf(av[1], av[2], av[3], av[4], av[5], av[6], av[7], av[8], av[9]); - if (ac == 11) - ft_printf(av[1], av[2], av[3], av[4], av[5], av[6], av[7], av[8], av[9], av[10]); - if (ac == 12) - ft_printf(av[1], av[2], av[3], av[4], av[5], av[6], av[7], av[8], av[9], av[10], av[11]); - if (ac == 13) - ft_printf(av[1], av[2], av[3], av[4], av[5], av[6], av[7], av[8], av[9], av[10], av[11], av[12]); + + printf("- conversions : cspdiuxX%% ---------------------\n"); + printf("------- flags : -0.* --------------------------\n\n"); + + printf("(\"%%X\",8645) : "); + printf("'%X' \n", 8645); + + printf("(\"%%04X\",8645) : "); + printf("'%04X' \n", 8645); + + printf("(\"%%07X\",8645) : "); + printf("'%07X' \n", 8645); + + printf("(\"%%7X\",8645) : "); + printf("'%7X' \n", 8645); + + printf("(\"%%.7X\",8645) : "); + printf("'%.7X' \n", 8645); + + printf("(\"%%7.7X\",8645) : "); + printf("'%7.7X' \n", 8645); + + printf("(\"%%10.7X\",8645) : "); + printf("'%10.7X' \n", 8645); + + printf("(\"%%010.7X\",8645) : "); + printf("'%010.7X' \n", 8645); + + printf("(\"%%010X\",8645) : "); + printf("'%010X' \n", 8645); + + printf("\n"); + + printf("(\"%%#X\",8645) : "); + printf("'%#X' \n", 8645); + + printf("(\"%%#.7X\",8645) : "); + printf("'%#.7X' \n", 8645); + + printf("(\"%%#010.7X\",8645) : "); + printf("'%#010.7X' \n", 8645); + + printf("(\"%%#10.7X\",8645) : "); + printf("'%#10.7X' \n", 8645); + + printf("(\"%%#10X\",8645) : "); + printf("'%#10X' \n", 8645); + + printf("(\"%%#.10X\",8645) : "); + printf("'%#.10X' \n", 8645); + + printf("(\"%%#10.10X\",8645) : "); + printf("'%#10.10X' \n", 8645); + + printf("(\"%%#010X\",8645) : "); + printf("'%#010X' \n", 8645); + 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 argument 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 + //