Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
| From | Tim Rentsch <txr@alumni.caltech.edu> |
|---|---|
| Newsgroups | comp.lang.c |
| Subject | Re: (simple) condition within for loop |
| Date | 2011-06-14 15:58 -0700 |
| Organization | A noiseless patient Spider |
| Message-ID | <kfnei2wf2bc.fsf@x-alumni2.alumni.caltech.edu> (permalink) |
| References | <582385e0-5f22-49d2-9703-e8f591c9927b@y30g2000yqb.googlegroups.com> <laiav6t16tk5vi9k9n96qs20qnqmrnn1kv@4ax.com> <95l0abFrhmU6@mid.individual.net> <eojav65u47b3iklhiolo1vfqc5o9j3h3gp@4ax.com> |
Geoff <geoff@invalid.invalid> writes:
> On Mon, 13 Jun 2011 11:27:07 +1200, Ian Collins <ian-news@hotmail.com>
> wrote:
>
>>On 06/13/11 11:24 AM, Geoff wrote:
>>> On Sun, 12 Jun 2011 15:58:44 -0700 (PDT), papoupapa
>>> <papoupapoug@gmail.com> wrote:
>>>
>>>> Hi,
>>>>
>>>> The code below doesn't read the condition that says to stop when the
>>>> entry is 0. A while loop might be more convenient....
>>>>
>>>>
>>>> #include<stdio.h>
>>>>
>>>> #define CMAX 5
>>>>
>>>> int main(void)
>>>> {
>>>> int Numbers[CMAX] ;
>>>> int nbr_in ;
>>>> int i, j ;
>>>>
>>>> nbr_in = 1 ;
>>>> j = 0 ;
>>>> for (i = 0 ; (nbr_in != 0) || (i< CMAX) ; i++, j++)
>>>> {
>>>> printf("\nValue %d : ", i+1) ;
>>>> scanf("%d",&nbr_in) ;
>>>> Numbers[i] = nbr_in ;
>>>> }
>>>>
>>>> printf("\n\nOUTPUT : \n") ;
>>>>
>>>> for (i = 0 ; ((Numbers[i] != 0) || (i< CMAX)) ; i++)
>>>> printf("\n%d. : %d", i+1, Numbers[i]) ;
>>>>
>>>> printf("\n\n") ;
>>>> return 0 ;
>>>> }
>>>>
>>>> Thanks in advance,
>>>
>>> Read your text about 'for' loops and the 'break' statement.
>>> Test conditionals with 'if' as in "if (num_in == 0)".
>>> Use the same technique for both loops.
>>
>>Why? What's wrong with testing more than one condition in a for loop
>>(assuming the logic is correct!)?
>
> KISS principle? Readability? Maintainability? Getting the logic right
> the first time, every time?
>
> The variable j is unnecessary. The initialization of nbr_in is
> unnecessary.
>
> Consider:
>
> for (i = 0; i < CMAX; i++)
> {
> printf("\nValue %d : ", i+1);
> scanf("%d", &nbr_in);
> Numbers[i] = nbr_in;
> if (nbr_in == 0) /*early termination*/
> break;
> }
Doesn't match the exit conditions of the original for
early termination. Here is a more exact refactoring:
i = 0;
do {
printf( "\nValue %d : ", i+1 );
scanf( "%d", &Numbers[i] );
} while( Numbers[ i++ ] != 0 && i < CMAX );
Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
(simple) condition within for loop papoupapa <papoupapoug@gmail.com> - 2011-06-12 15:58 -0700
Re: (simple) condition within for loop Ian Collins <ian-news@hotmail.com> - 2011-06-13 11:08 +1200
Re: (simple) condition within for loop Geoff <geoff@invalid.invalid> - 2011-06-12 16:24 -0700
Re: (simple) condition within for loop Ian Collins <ian-news@hotmail.com> - 2011-06-13 11:27 +1200
Re: (simple) condition within for loop Geoff <geoff@invalid.invalid> - 2011-06-12 16:47 -0700
Re: (simple) condition within for loop Ian Collins <ian-news@hotmail.com> - 2011-06-13 12:01 +1200
Re: (simple) condition within for loop Geoff <geoff@invalid.invalid> - 2011-06-12 19:51 -0700
Re: (simple) condition within for loop papoupapa <papoupapoug@gmail.com> - 2011-06-13 06:00 -0700
Re: (simple) condition within for loop Willem <willem@toad.stack.nl> - 2011-06-13 14:39 +0000
Re: (simple) condition within for loop "J. J. Farrell" <jjf@bcs.org.uk> - 2011-06-13 22:13 +0100
Re: (simple) condition within for loop Geoff <geoff@invalid.invalid> - 2011-06-13 17:13 -0700
Re: (simple) condition within for loop Tim Rentsch <txr@alumni.caltech.edu> - 2011-06-14 15:58 -0700
Re: (simple) condition within for loop Nobody <nobody@nowhere.com> - 2011-06-13 02:32 +0100
Re: (simple) condition within for loop "Herbert Rosenau" <os2guy@pc-rosenau.de> - 2011-06-14 06:41 +0000
csiph-web