Problem with ()?():() as ending test in for-loop

Barry Margolin barmar at think.COM
Thu May 25 04:14:28 AEST 1989


In article <1200 at liszt.kulesat.uucp> vanpetegem at liszt.kulesat.uucp writes:
>The code with which I am in trouble, goes as follows:
>
>	 for(n = 1;  ((n % 10) ? (k > 2) : (n < 100));  n++)
>                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>           {
>             ..... (in some expressions k is changed, depending on n)
>	   }
>
>What I want to do is simply perform the test (k > 2) as ending test for the
>"for-loop", except in the cases where n is dividable by 10. In the latter
>situation the test (n < 100) has to be done.

The sense of the test clause of your :? expression is wrong.  When n
is divisible by 10, (n % 10) is 0, and 0 represents "false" in C.  I
would write your end test as

	((n % 10) == 0) ? (k > 2) : (n < 100)

although "real C programmers" would probably write it as

	(n % 10) ? (n < 100) : (k > 2)

i.e. they would just interchange the true and false clauses, taking
advantage of the fact that the result of the % can be used as a
boolean.

Barry Margolin
Thinking Machines Corp.

barmar at think.com
{uunet,harvard}!think!barmar



More information about the Comp.lang.c mailing list