Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #6086

Re: (simple) condition within for loop

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>

Show all headers | View raw


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


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