int j=42;
if((5<j<=1)) {
printf("yes");
} else {
printf("no");
}
Выход:Math-как цепочки оператора сравнения - как, "если ((5 <у <= 1))"
yes
Почему это выход да?
Разве это не только условие истины?
int j=42;
if((5<j<=1)) {
printf("yes");
} else {
printf("no");
}
Выход:Math-как цепочки оператора сравнения - как, "если ((5 <у <= 1))"
yes
Почему это выход да?
Разве это не только условие истины?
C не понимает математику-подобный синтаксис, так
if(1<j<=5)
не интерпретируется, как вы ожидаете и хотите; это должно быть
if (1 < j && j <= 5)
или аналогичный.
Как объяснено в других ответов, выражение оценивается как
((1 < j) <= 5)
=> ("true" <= 5)
=> "true"
, где «истина» (логическое значение) неявно преобразуется в 1, как, например, explaneid here, и ссылки на стандарты тоже, и это объясняет, почему «истина» должна быть «меньше» 5 (хотя в C может быть не совсем правильно говорить о «неявном преобразовании из bool в int»)
+1 за ответ .... но почему Менака Ишан получил правильный ответ? m confused – Ashish
@Ashish: неявное преобразование из булевого выражения в int –
объяснено в другом ответе: ((1
As per operator precedence и LR ассоциативность,
1<j
принимает значение 1
1<=5
оценивает 1
if(1)
{
printf("yes")
Спасибо за ваше время –
, что вы хотите, чтобы написать это if (1 < j && j <= 5)
, что происходит в вашем случае: if (1 < j <=5)
1 < j
оценивается первым, и это правда, так что оценивается в 1, и ваше состояние становится
if (1 <=5)
, что также верно, так printf("yes");
получает excuted
Спасибо за ваше время –
Ваш вопрос немного сломан, но я считаю, что следующее разъяснит, что творится для вас:
В C 1 < j <= 5
означает то же, что и (1 < j) <= 5
. И значение 1 < j
равно 0 или 1 в зависимости от того, меньше или равно 1 или строго больше 1. Так вот что происходит при нескольких значениях j в вашем коде:
Если j == 0
, это выражение равно (1 < 0) <= 5
, который сводится к 0 <= 5
(потому что 1 < 0
является ложным). Это истинное выражение. Ваша программа выводит «да».
Если j == 3
, это выражение (1 < 3) <= 5
, что сводится к 1 <= 5
(потому что 1 < 3
верно). Это истинное выражение. Ваша программа выводит «да».
Если j == 6
, это выражение (1 < 6) <= 5
, что сводится к 1 <= 5
(потому что 1 < 6
верно). Это истинное выражение. Ваша программа выводит «да».
Во всех случаях ваша программа выдает «да», потому что 1 < j
либо 0 или 1, и в любом случае это меньше, чем 5.
То, что вы должны были использовать это 1 < j && j <= 5
.
Вы * можете * сделать это, он просто не делает то, что думает OP (конечно, вы, вероятно, не должны этого делать). –
Мне любопытно, почему вы думаете, что результат неправильный. Какую логику вы считали программой следующей, чтобы она печатала «нет»? Ваше объяснение, «потому что 5» немного на короткой стороне. –
Это не то, что я задал Человек, который редактировал мой вопрос, думал, что я написал его неправильно Но это не так. Он не запускал код перед редактированием –