From 8b3d35bdc9d56ff3d39b1d5d8df114b4f1f023cc Mon Sep 17 00:00:00 2001 From: Hugo LAMY Date: Sat, 11 Jan 2020 01:45:00 +0100 Subject: [PATCH] some precisions in main and advancements in pseudo code in printf --- .ft_printf.c.swn | Bin 24576 -> 0 bytes ft_printf.c | 215 +++++++++++++++++++++-------------------------- main.c | 30 +++++-- 3 files changed, 118 insertions(+), 127 deletions(-) delete mode 100644 .ft_printf.c.swn diff --git a/.ft_printf.c.swn b/.ft_printf.c.swn deleted file mode 100644 index e57f2e2dfe1ec70f9b03caa599497810b887e7c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24576 zcmeI4dyFJUdBB_Gu-&mu91s#16qWbb+nK$d-I>|v-Q_MeP8`7Ja~@zFnp>9HnVy-p zdV7ZHp1WP2O+-RSlz?I$LJ2P;gvdLJf+8UzMIw;^Cvo`4u}C5wGFC!fBqAhI49NL? zRW&``vvU_e7Adj1@$aUqy1x3p`s&e-`j(yQJ+Hk>Z7$Uuj+-3k_9HKU)7yUY2B+&f zPHz-8clYJO)epZmTp!eGORM#z&hRQl-)bsc9t?vh=`44WZF9ENx{6S7sqjGIf#>dl zQPQbw-sr5lJ4|9PY1d;LqW6@LBi-d<@mk_TdJ{yh z21_7v|HQRN;dkNvunSFi6Z{nX7`z&8gBmQuJiHukf@|R#c#;n{{|;Y;FT(G``=ALG z_%>tb^Y9?N9v%SKgmskWMo}DeBfqU$z2;EqV?G>Rh~_*M2lx5?PAONSTs}3C4f|17 z>3@tM|4zxKB@W7^BC~XgTuy{&l)S(JRYA18?7Bfmm2N2|`vYH{Rz$DF1HTn?0)JRK z7MIIqmt%QZ4gF*^j8xKl79zgVwWBCV7Gl*rgep|4A6@i^anL{1$|6tohw9uL&Yo4N zwJJ`C?CCD44wsUipYvEQG0T09`0wCB?N3AWvg2Or1);A>rI^l%{JmuRQh(SkVN$uQ zZaJ+@Ejw=LN8O}Hk?JW1Dn0MoEQX$pQg=~$AWi6ze9F1(=#pu~Qb`Z!MblnSEiEmT z9cOXbSzL5&_m_;KvNY&^RY?bhudD_Aj=I!qChAf%R$7bS7I9Z}jI8lGpDL(8pNdnh zlT~LFhWoa2lZk96Y<9PkVKa*9gx%6uxZm=bhRrZkyZts}w$)66ex#bM7EYqiRMJ-> z8fzP{nd5#X`WVT>xUJX)$A??prhHl2Tc0w+U^1bJ$gv z0(u}wVm;VBqmgF&djqQ7j+5q4%b|}k*7k>@yEz#6&7m>R^t5j2Vks_bQ!6s&{AR1C z7ICK^`%&U4Q)6nnk!C>MB7J;Prf}+NZRi0f>!B@O6fI!FWGY2@H&M*avZ|+syBFhe zCm&Pk8lgJF{;rzx?-i$zuKx-v&D40xuNY%P=w0hs+@t%luHW9xtV4 z0i?=N>`%mW$DEoWC&S4OFUI#|fYLr^d6C=N@&hoLlySm6h76tShH+9kqZ@NtalSjy z*IZXd_-QpsbJnPCk+m?tV2aS=C2}VVi!81z1DzlYw`F8Z z(LgFN*0@rYo;PAlx^9gt5NR%#bi8DosKxRwGr8X?*_-I16tFevW>A=4Eq+;AYnMh@ zuf*bo3)O|PEvWQDr$+5j;Jz*8PqF_dr2uc0pV(y}DTYuSVcE=t#6v-ZmU!zsDu;e%?ir5PsvFlr|Lwq6YNC@ND%dQUGO zM_E2{84EVU4`W|$Y^GQ|Xtw<6qQ`XxN;AveFzEL1Mzh`a+oixWlY&;cZob0mGm=g1 zs2DLxmjY>`EcTZqlRI114pzWcz%4(@8IhM8ShJ~)!h8z(qb^DDwQ*w*K_A9 z!CZP*PZxU{dWB_CFAv%0FZ(c+yT?tIW4VLbTk)}DYQWu87NT9%A0>)=bL>2==LyGc z%&){-4OQVbIcl9$TaEdpdZ06Qxf=zM&Z@4q$hr`1(M{$)kPKx-VV%=UiXI-BYsYJH zsgYW{#So(Rm?C-|(hHG;qh&7W=N!k8xqTWRuEeP=VhM?{9rIX$4Rbu`Pabz0;@McI zk9rH9@{Vs!F6Pb})?2-v*Ym>A3&&TtCU%aqGQYmp@w#4=$-QoR&*Ys}lZufr1>u=4vQB}8wek2TbT1&k%lbkt*jh^zIr5-~;-v7VJd-z4( z-R1p%yg&bsywl73|KGsp;E&+r@Gg*d|F=R1?uI%Xg&W{HkZ%FshHt_*;9ud3@CbYo zJ_!3DI!90(g$D``6dou%Pp^zUJ1}ZOVyyZrtk+`JN;~Zf$LxzwnGBD(Iq*>%hN|E=s*zu9H1@%}%K z@BbR_@n3-7fPMIBkoWv$_+fY@yaJAZyzjpQKEro}hv3)Y7vKWi4zGZhf&-7U$Nva? z3Lb=CfnSEp5Wz0o1E=96NL;{wvETny_!LM?z&`B4y|4v83FqK0I1Q(u2J`SrcnQ21 zu7U5c*Z(i@1biAk3cGLuu7yYO!-qio3ZXA|i4%w(Qf z=}E9zF1{;$lA7%PJga)2zK}bx|FgTYo#$07oDMcfonfBEC$8meDo{_C$n}Wcy3dJB z%SZ_=l5SU(*fMUh)tn4H_PE#(HM>})x%s#v|FtUf!G*{K7usSJ*Cl1Id>sk9N4hg? zUhL12Zjrw*Af&^U4eq&C+$PsXg#~h50>WD36A7P~oTouyyTq`RF7|^q`)&_7>5iT3 z;JIv)`%$~plsFG!PIP1mp()3Ylbj3ww@ulabo0&Ufz?t=ps#8SuQba#GiTpC*<4VO5sL^s5!zy;bNVGt*7 zlTaIX95*82C0r!@M2F?@YxWFe*kA+Pe`-2ty?FqBSCD(Zu3R{j0DcciZ19$PLerhQ?f{9&e;Zr_AL2X3;~0A{e2dum2jD4U-QNT6hIx?K_%2)r zzfFAlo$z&H(*FS-gFl7egAahjs^1S6VHetP0nWi)PyrX7z&D?P_rZJN?J$HlgZS+n z*kf<{Q_WuHyNvl%vv=TA&EC|f8e)+qIqAcT>zx`z#GS@fr<($#94V2lKlrd(F zrp=mdL;W%kCgso=LGhH9Vh1doD;|gIUJrXPId0;z(Z#M)YIy|$iz z0I{hm5mU!!m#(dep4ne0Vn1`ySzkp6c)e zL}Q2DE$N8E8AesrFwbvB8TXx@?Ttx(BR-rlTRou~2ftd=m@pjCtZ+~MIWLCfi+zu@ zqo|=3i{6=PCsT5@eq!~+`bPc4Rn~&pWvYypw9$+j(MoI4d7gXxtj12X>a+E=wUw)A zoqf5=AWF6BsU~`RDDI)T_rJ8(T2NoRir)I#+LWP^tgdDB%D~cUwO*}wre+*cQdlKp zkFJnWzyrU!abyL>tgV`Hmd3Md#-4cdv zF(r@$BZWT(J6uh+UQv?OA-b!7U(^JZI>n5|dt}|u4vuS7YHg%T6pKI_p7V;;G>2##NBC>kit^Y?N zs~uyHc^f^cLgu~du^g$RYC)CsSAeoQ?wHpv`Fn|2om5e$>rV+*c#B6%X3M zXz%>Ij^Lj9_QRXy_yd)BXnFnEH}X66h0H$I$j6qf97Bp-=Ik*or%UK>G-GAv86zt* zt<03j38nLfztOPAl%`CHgOaI`mYpTJm=nV4i6WzKN=TQ;$=C -//int ft_error(int i) -//{ -// if (i == 0) -// return (1); -// return (0); -//} - -/* -%[arg_nbr$][flags 0,-,#,', ,+][width *][.precision *][length hh,h,ll,l,L,j,t,z][specifier d,i,u,x,X,c,s,p,%,e,f,g,n,E,F,G,a,A,C,S,o] -% [flags 0,- ][width *][.precision *] [specifier d,i,u,x,X,c,s,p,% ] -% [flags #,', ,+] [length hh,h,ll,l ][specifier e,f,g,n ] - -str = "%3s - truc: %.2i - machin: %04c \n" - -ft_next_word - if str[0] == '%' - from str+1 to [specifier]; - else - from str[0] to '%'; - [%3s][ - truc: ][%.2i][ - machin: ][%04c][ \n] - -while ((s = next_word(str)) != NULL) - type = ft_specifier(&s); // return the type according to specifier and length && pull them out of s - while (flag_*(s)) - s = ft_expand_star(va_arg, "i", s); // (use ft_convert) replace first * by arg in s, ex: "%*.*i" --> "%2.*i" --> "%2.3i" - print = ft_convert(va_arg, type); - if ((i = flag_p(s))) - print = ft_precision(i, print); - if ((i = flag_w(s))) - if (flag_-(s)) - print = ft_right_padded(i, print); - else if (flag_0(s)) - print = ft_right_padded(i, print); -( if (flag_+(s)) -( else if (flag_space(s)) -( if (flag_'(s)) -( if (flag_#(s)) -( print = ft_alternate_form(print) - - -*/ - -//char *ft_nextword(char *str) -//{ -// char *word; -// -// word = strdup(str); -// return (word); -//} - -//t_prist *ft_store(char *str) -//{ -// t_prist *lst; -// t_prist *lstmp; -// char *tmp; -// -// lst = NULL; -// while (*str != '\0') -// { -// lstmp = lst; -// (*lst) = (t_prist *)malloc(sizeof(*lst)); -// tmp = ft_nextword(str); -// (*arglst)->str = ft_strdup(tmp); -// ...fill_flag...; -// if (tmp != NULL) -// tmp[0] = '%'; -// str = tmp; -// lst->next = lstmp; -// } -// return (lst); -//} - /* +** va_list ap; ** char *print; | -contain the arg converted into a string ** char *type; | -contain the specifier type to use ** | by va_arg ** while s = next_word() | -return the next sequence to be print ** | (either a string, or a conversion) -** type = ft_specifier(&s) | -return the type if it's a conversion, +** type = ft_specifier(&s) | -return the type if it's a conversion, or "%", ** | or NULL if it's a string. ** | if convers0, rmvs length & specifier from s ** if !type: ft_put_word() | -print the string if it wasn't a conversion @@ -91,45 +20,88 @@ while ((s = next_word(str)) != NULL) ** ft_flag_transform() | -proceed all modification according to flags ** ft_put_word(print) | -print the string fully converted ** return (length) | -return the length of what was printed +** +** char *next_word(char *s); +** char *ft_specifier(char **s); +** int ft_put_words(char *s); +** void flag_*(char *s); +** void ft_expand_star(int i, char **s); +** char *ft_convert(va_list ap, char *type); +** char *ft_flag_transform(char *s, char *print); */ int ft_printf(char *string, ...) { - char *print; - char *type; - int length; +// char *print; +// char *type; +// int length; +// va_list ap; +// +// length = 0; +// va_start(ap, string); +// while ((s = next_word(str)) != NULL) +// { +// if (!(type = ft_specifier(&s))) +// lentgh += ft_put_word(s); +// while (flag_*(s)) +// ft_expand_star(va_arg(ap, int), &s); +// if (*type == '%') +// print = ft_strdup("%"); +// else +// print = ft_convert(ap, type); +// print = ft_flag_transform(s, print); +// length += ft_put_word(print); +// } +// return (length) +//} - length = 0; - while ((s = next_word(str)) != NULL) - { - if (!(type = ft_specifier(&s))) - lentgh += ft_put_word(s); - while (flag_*(s)) - ft_expand_star(va_arg(ap, int), &s); - print = ft_convert(va_arg(ap, type), type); - print = ft_flag_transform(s, print); - length += ft_put_word(print); - } - return (length) -} +/* +** if i = flag_p(&s) | -precision is calculated before width, +** | on str, if < length(str), cuts it, +** print = ft_precision() | on nbr, if > length(nbr), add '0' before, +** | then add '-' if negatif +** | (if precision given with flags '-' or '0' +** | they're ignored and cuted from s) +** if i = flag_w(s) | -width is caculated +** if flag_-(&s) | -if flag '-', rm '-' and width from s +** print = ft_rpadd() | -put extra width as ' ' to right, +** else if flag_0(&s) | -if flag '0', rm '0' and width from s +** print = ft_lpadd() | -put extra width as '0' to left +** else | -if just width +** print = ft_lpadd() | put extra width as ' ' to left +** // if flag_+(s) | +** // else if flag_space(s) | +** // if flag_'(s) | +** // if flag_#(s) | +** // print = ft_altfrm() | +** +** int flag_p(char **s); +** char *ft_precision(int i, char *print); +** int flag_w(char *s); +** void flag_-(char **s); +** char *ft_rpadd(int i, char *print); +** char *ft_lpadd(int i, char *print, char c); +*/ // ft_flag_transform() // { -// if ((i = flag_p(&s))) // precision is calculated before width, if its on string it cuts it if smaller than it, -// print = ft_precision(i, print); // and on numbers it add '0' before it if bigger, then add minus sign if negatif (if precision is given with flags - or 0 they're ignored and cuted from s) -// if ((i = flag_w(s))) // +// if ((i = flag_p(&s))) +// print = ft_precision(i, print); +// if ((i = flag_w(s))) // { -// if (flag_-(s)) -// print = ft_right_padded(i, print); -// else if (flag_0(s)) -// print = ft_left_padded(i, print); +// if (flag_-(&s)) +// print = ft_rpadd(i, print); +// else if (flag_0(&s)) +// print = ft_lpadd(i, print, '0'); +// else +// print = ft_lpadd(i, print, ' '); // } -// // if (flag_+(s)) -// // else if (flag_space(s)) -// // if (flag_'(s)) -// // if (flag_#(s)) -// // print = ft_alternate_form(print) -// } + // if (flag_+(s)) // + // else if (flag_space(s)) // + // if (flag_'(s)) // + // if (flag_#(s)) // + // print = ft_alternate_form(print) // + // } t_prist *lst; va_list ap; @@ -162,24 +134,6 @@ int main(void) i = 6; printf("%s-%s-%c-%i\n\n", s, str, c, i); ft_printf(s, c, str, i); - printf("char %lu\n", sizeof(char)); - printf("short %lu\n", sizeof(short)); - printf("int %lu\n", sizeof(int)); - printf("long %lu\n", sizeof(long)); - printf("long long %lu\n", sizeof(long long)); - printf("unsigned char %lu\n", sizeof(unsigned char)); - printf("unsigned short %lu\n", sizeof(unsigned short)); - printf("unsigned int %lu\n", sizeof(unsigned int)); - printf("unsigned long %lu\n", sizeof(unsigned long)); - printf("unsigned long long %lu\n", sizeof(unsigned long long)); - printf("char * %lu\n", sizeof(char *)); - printf("short * %lu\n", sizeof(short *)); - printf("int * %lu\n", sizeof(int *)); - printf("long * %lu\n", sizeof(long *)); - printf("long long * %lu\n", sizeof(long long *)); - printf("double %lu\n", sizeof(double)); -// printf("wint_t %lu\n", sizeof(wint_t)); -// printf("wchar_T %lu\n", sizeof(wchar_t)); return (0); } @@ -268,4 +222,25 @@ nhh char * nh short * 15 short * nl long * 16 long * nll long long * 17 long long * + + + printf("char %lu\n", sizeof(char)); + printf("short %lu\n", sizeof(short)); + printf("int %lu\n", sizeof(int)); + printf("long %lu\n", sizeof(long)); + printf("long long %lu\n", sizeof(long long)); + printf("unsigned char %lu\n", sizeof(unsigned char)); + printf("unsigned short %lu\n", sizeof(unsigned short)); + printf("unsigned int %lu\n", sizeof(unsigned int)); + printf("unsigned long %lu\n", sizeof(unsigned long)); + printf("unsigned long long %lu\n", sizeof(unsigned long long)); + printf("char * %lu\n", sizeof(char *)); + printf("short * %lu\n", sizeof(short *)); + printf("int * %lu\n", sizeof(int *)); + printf("long * %lu\n", sizeof(long *)); + printf("long long * %lu\n", sizeof(long long *)); + printf("double %lu\n", sizeof(double)); +// printf("wint_t %lu\n", sizeof(wint_t)); +// printf("wchar_T %lu\n", sizeof(wchar_t)); + */ diff --git a/main.c b/main.c index b9f93d4..1748ce6 100644 --- a/main.c +++ b/main.c @@ -121,6 +121,9 @@ int main(void) // printf("(\"%%6i\",-456) ft : "); ft_printf("'%6i'\n", -456); printf("(\"%%6i\",-456) : "); printf("'%6i'\n", -456); printf("\n"); + // printf("(\"%%6%%\") ft : "); ft_printf("'%6%'\n"); + printf("(\"%%6%%\") : "); printf("'%6%'\n"); printf("\n"); + printf("- flag - --------------------------------------\n\n"); // printf("(\"%%-3s\",\"a\") ft : "); ft_printf("'%-3s'\n", "a"); @@ -144,19 +147,23 @@ int main(void) // printf("(\"%%-3i\",123456) ft : "); ft_printf("'%-3i'\n", 123456); printf("(\"%%-3i\",123456) : "); printf("'%-3i'\n", 123456); printf("\n"); - printf("- flag 0 --------------------------------------\n\n"); + printf("- flag 0 (diouxX%%)------------------------------\n"); + printf("- \n"); // printf("(\"%%03i\",1) ft : "); ft_printf("'%03i'\n", 1); printf("(\"%%03i\",1) : "); printf("'%03i'\n", 1); printf("\n"); - // printf("(\"%%09i\",\"123456\") ft : "); ft_printf("'%09s'\n", "123456"); -// printf("(\"%%09i\",\"123456\") : "); printf("'%09s'\n", "123456"); printf("\n"); + // printf("(\"%%03u\",1) ft : "); ft_printf("'%03u'\n", 1); + printf("(\"%%03u\",1) : "); printf("'%03u'\n", 1); printf("\n"); - // printf("(\"%%03i\",1) ft : "); ft_printf("'%03i'\n", 1); - printf("(\"%%03i\",1) : "); printf("'%03i'\n", 1); printf("\n"); + // printf("(\"%%03x\",1) ft : "); ft_printf("'%03x'\n", 1); + printf("(\"%%03x\",1) : "); printf("'%03x'\n", 1); printf("\n"); - // printf("(\"%%03i\",1) ft : "); ft_printf("'%03i'\n", 1); - printf("(\"%%03i\",1) : "); printf("'%03i'\n", 1); printf("\n"); + // printf("(\"%%03%%\") ft : "); ft_printf("'%03%'\n"); + printf("(\"%%03%%\") : "); printf("'%03%'\n"); printf("\n"); + + // printf("(\"%%0%%\") ft : "); ft_printf("'%0%'\n"); + printf("(\"%%0%%\") : "); printf("'%0%'\n"); printf("\n"); printf("- flag . (diouxXs) ----------------------------------------------------------\n"); printf("- if the . is not followed by a number, the value is 0\n"); @@ -228,6 +235,9 @@ int main(void) // printf("(\"%%.07i\",8645) ft : "); ft_printf("'%.07i'\n", 8645); printf("(\"%%.07i\",8645) : "); printf("'%.07i'\n", 8645); printf("\n"); + // printf("(\"%%.7%%\") ft : "); ft_printf("'%.7%'\n"); + printf("(\"%%.7%%\") : "); printf("'%.7%'\n"); printf("\n"); + printf("- flag * --------------------------------------\n\n"); // printf("(\"%%*i\",3,1) ft : "); ft_printf("'%*i'\n", 3, 1); @@ -309,6 +319,12 @@ int main(void) // printf("(\"%%010s\",str) ft : "); ft_printf("'%010s'", str); printf("(\"%%010s\",str) : ");/* printf("'%010s'", str);*/ printf(" flag 0 has undefined behavior with s specifier\n\n"); + // printf("(\"%%010c\",c) ft : "); ft_printf("'%010c'", c); + printf("(\"%%010c\",c) : ");/* printf("'%010c'", c);*/ printf(" flag 0 has undefined behavior with c specifier\n\n"); + + // printf("(\"%%03p\",str) ft : "); ft_printf("'%03p'\n", str); + printf("(\"%%03p\",str) : ");/* printf("'%03p'\n", str);*/ printf(" flag 0 has undefined behavior with p specifier\n\n"); + // printf("(\"%%.-7X\",8645) ft : "); ft_printf("'%.-7X'", 8645); printf("(\"%%.-7X\",8645) : ");/* printf("'%.-7X'", 8645);*/ printf(" invalid flag - for .precision\n\n");