Path: csiph.com!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail From: Tim Rentsch Newsgroups: comp.lang.c Subject: Re: Programming exercise/challenge Date: Fri, 01 Jan 2021 08:24:31 -0800 Organization: A noiseless patient Spider Lines: 82 Message-ID: <86ble8tykg.fsf@linuxsc.com> References: <86v9dehts2.fsf@linuxsc.com> <87360hq0si.fsf@bsb.me.uk> <86wnxq2do9.fsf@linuxsc.com> <87eejx9tna.fsf@bsb.me.uk> <86tuss2a6i.fsf@linuxsc.com> <87wnxm8ztm.fsf@bsb.me.uk> <868sa21i7m.fsf@linuxsc.com> <874kkp99rh.fsf@bsb.me.uk> <861rffyp2t.fsf@linuxsc.com> <865z4iv0fy.fsf@linuxsc.com> <8iptuftts74li5jpblinf41aqsf4ks3f6l@4ax.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Injection-Info: reader02.eternal-september.org; posting-host="b44b5f4d6daf76ab4210a530b39b09ae"; logging-data="17941"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/eTFsmF4w+45nwaE7eII++gCI9WJyjJkc=" User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux) Cancel-Lock: sha1:KnH5d+sfN/o9xhd99WJmFLDI2f0= sha1:a7r8kPU6MAiRaJs6oaJ4e54R1As= Xref: csiph.com comp.lang.c:158082 Rosario19 writes: > On Fri, 01 Jan 2021 10:09:16 +0100, Rosario19 > wrote: > ... > > find one bug... > > the easy version does not handle case as > /\ > \ > \* comment *\ > > > #include > main() > {int c,cp,cpp; > for(cp='a';cp!=EOF&&(c=getchar())!=EOF;) > {if(c=='/') > {cp=c; > if((c=getchar())=='*') {for(; ( > c=getchar())!=EOF;cp=c)if(cp=='*'&&c=='/')break;} > else if(c=='/') > {for(;cp!='\n'&&(cp=getchar())!=EOF; ); if(cp!=EOF)putchar(cp);} > else if(c==EOF) {putchar(cp); break;} > else {putchar(cp); putchar(c);} > } > else if(c=='\''||c=='\"') > > {for(putchar(c),cpp='a';(cp=getchar())!=EOF;cpp=cp,putchar(cp))if(cp==c&&cpp!='\\'){putchar(cp);break;}} > else {putchar(c);cp=c;} > } > return 0; > } > > > the version handle case as > /\ > \ > \* comment *\ > > but change the code, make union of lines if find \\ \n > > #include > main() // use ungetc on stdin, remove \\n > {int c,cp,cpp; > for(cp='a';cp!=EOF&&(c=getchar())!=EOF;) > {if(c=='*'&&cp=='/') {for(;( > c=getchar())!=EOF;cp=c)if(cp=='*'&&c=='/')break;} > else if(c=='/') > {if(cp=='/') {for(;cp!='\n'&&(cp=getchar())!=EOF; ); > if(cp!=EOF)putchar(cp);} > else {cp=c; > if((c=getchar())=='*') {for(; ( > c=getchar())!=EOF;cp=c)if(cp=='*'&&c=='/')break;} > else if(c=='/') > {for(;cp!='\n'&&(cp=getchar())!=EOF; ); if(cp!=EOF)putchar(cp);} > else if(c==EOF) {putchar(cp); > break;} > else if(c=='\\'||c=='\''||c=='\"') ungetc(c,stdin); > else {putchar(cp); > putchar(c);} > } > } > else if(c=='\\'){cpp=cp;cp=c; > if((c=getchar())==EOF){putchar(cp);break;} > else if (c=='\n') cp=cpp; // > unisce tutte le linee > else > {putchar(cp);putchar(c);} > } > else > if(c=='\''||c=='\"'){for(putchar(c),cpp='a';(cp=getchar())!=EOF;cpp=cp,putchar(cp))if(cp==c&&cpp!='\\'){putchar(cp);break;}} > else {putchar(c);cp=c;} > } > return 0; > } For future postings, I ask that you give main() a return type of int (so 'int main(){ ... }'), and format the program using 'indent -kr'. I have collected the programs you have posted so far, but may very well ignore future submissions that look as awful as this.