Personal computing discussed

Moderators: emkubed, Captain Ned

Prelude
Gerbil
Topic Author
Posts: 52
Joined: Fri Jan 04, 2002 7:00 pm
Location: Mizzou
Contact:
It is my understanding that the following code segment (in C) is valid:

int a, b, c;
a = 1;
b = 1;
c = 1;
if (a == b == c)
printf("AT-HT");

This code, when run should print AT-HT. However, with the compiler my university uses, if a, b and c are set to -1, the IF statement is not taken. Is this a bug in the compiler or is it my misunderstanding of the C language?

Thanks and Peace,
Will
Max: "It seems these evil men will never begin to understand our peaceful nature."
Sam: "Hope they figure it out pretty quick. My trigger finger is blistering."
-- Sam & Max, the Freelance Police

Speed
Gerbil Elite
Posts: 702
Joined: Thu Dec 27, 2001 7:00 pm
Location: Chicago, IL USA
Contact:
Try adding a newline, and breaking out the tests:

main()
{
int a = 1, b = 1, c = 1;

if ((a == b) && (b == c))
printf("AT-HT\n");
}

_________________
You are false data.

Toyotamr2_86NA
Posts: 210
Joined: Fri Feb 01, 2002 7:00 pm
AAHHHH NO!!!!!!!!
Borland C++ FLash backs from high school.

From what I remember leaving out the "MAIN()" and the "{,}" can cause strange things like that to occur.

creepy_hand
Gerbil In Training
Posts: 6
Joined: Wed Mar 06, 2002 7:00 pm
Prelude - that's quite a simple one, and the reason is due to this: The expression is broken down into two components that are evaluated left to right (I think, I never bothered to learn C's precedent rules):

((a == b) == c)

In your compiler's case the first truth test "a == b" will probably evaluate to 1 if true and 0 if false. So the expression is reduced to ((1) == c) if a was equal to b (which it was, because they're both 1). Then, because c is -1, the expression "((1) == c)" is obviously not true, so it comes up false.

It only worked with all the variables being 1 because that happened to co-incide with the truth value for your compiler which is also 1.

Truth operators are a bit funny to get used to in C, , so try to deal with them on their own terms - in other words, use (a == b && b == c).

Cheers,
creepy_hand

### Who is online

Users browsing this forum: Yahoo [Bot] and 2 guests