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.