Problem with ()?():() as ending test in for-loop
Gary L. Randolph
randolph at ektools.UUCP
Thu May 25 23:35:47 AEST 1989
In article <20658 at news.Think.COM> barmar at kulla.think.com.UUCP (Barry Margolin) writes:
>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)
=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.
NOOOOO! I do NOT think your logic is wrong. I am sure it is correct
according to your explanation of what you want to do. There *is* a
problem however...
The modulus operator, when used for integer division as in your
example, truncates the fractional part. This, of course, makes the
initial check result in a fall out of the for since 1%10 *is* 0 and
therefor the n<100 test is done and, n being 1 bye-bye.
This, I believe is your real problem. Also, you don't mention whether
variable k was initialized before entering the for. IT SHOULD BE.
I hope this helps...
--Gary Randolph
More information about the Comp.lang.c
mailing list