+ 4

why the output of this code equal 1 ?

int x=10,y=20,z=5,i; i=x<y<z; printf("%d",i);

14th Mar 2022, 5:15 PM
Aly Alsayed
Aly Alsayed - avatar
4 ответов
+ 5
x<y<z Think it as (x<y)<z x<y is a condition which always leads to either true or false. True means 1 False means 0 So, (x<y) => 10<20 => true => 1 Now, (x<y)<z => 1<5 => true =>1 So, i=1
14th Mar 2022, 6:01 PM
Kashyap Kumar
Kashyap Kumar - avatar
+ 5
it will show a warning the answer is for only x<y after that it will give you a warning when we compare elements the answer is given as true or false in programing true = 1 and false = 0 here x < y is true ( so it is true = 1 ) it means x < y becomes 1 then 1 < z which is also true = 1 ( it will throw warning ) so i becomes 1; hence final answer is 1. /****************/ if you compare only x<y it will give you no warning but compairing x<y<z will throw warnings
14th Mar 2022, 6:06 PM
NonStop CODING
NonStop CODING - avatar
+ 2
I can see HOW i is equal to 1 Your assignment expression results as true for 10 is less than 20. The WHY is a bit beyond my pay grade.... Perhaps someone else will have an explanation on why this behaves like that. If you just want to assign i with the smallest value of your other 3 variables, I think a repeated ternary might be the way to do it. Again, this isn't something I'm 100% on the syntax, but maybe; i = x ? x<y : y ? y<z : z;
14th Mar 2022, 5:41 PM
HungryTradie
HungryTradie - avatar
+ 2
Ok thnx guys i understod it
14th Mar 2022, 6:08 PM
Aly Alsayed
Aly Alsayed - avatar