2014-01-08 5 views
0
int j=42; 
if((5<j<=1)) { 
    printf("yes"); 
} else { 
    printf("no"); 
} 

Выход:Math-как цепочки оператора сравнения - как, "если ((5 <у <= 1))"

yes 

Почему это выход да?
Разве это не только условие истины?

+2

Вы * можете * сделать это, он просто не делает то, что думает OP (конечно, вы, вероятно, не должны этого делать). –

+0

Мне любопытно, почему вы думаете, что результат неправильный. Какую логику вы считали программой следующей, чтобы она печатала «нет»? Ваше объяснение, «потому что 5» немного на короткой стороне. –

+0

Это не то, что я задал Человек, который редактировал мой вопрос, думал, что я написал его неправильно Но это не так. Он не запускал код перед редактированием –

ответ

7

C не понимает математику-подобный синтаксис, так

if(1<j<=5) 

не интерпретируется, как вы ожидаете и хотите; это должно быть

if (1 < j && j <= 5) 

или аналогичный.

Как объяснено в других ответов, выражение оценивается как

((1 < j) <= 5) 

=> ("true" <= 5) 

=> "true" 

, где «истина» (логическое значение) неявно преобразуется в 1, как, например, explaneid here, и ссылки на стандарты тоже, и это объясняет, почему «истина» должна быть «меньше» 5 (хотя в C может быть не совсем правильно говорить о «неявном преобразовании из bool в int»)

+0

+1 за ответ .... но почему Менака Ишан получил правильный ответ? m confused – Ashish

+2

@Ashish: неявное преобразование из булевого выражения в int –

+0

объяснено в другом ответе: ((1 ShinTakezou

6

As per operator precedence и LR ассоциативность,

1<j принимает значение 1

1<=5 оценивает 1

if(1) 
{ 
    printf("yes") 
+0

Спасибо за ваше время –

2

, что вы хотите, чтобы написать это if (1 < j && j <= 5)

, что происходит в вашем случае: if (1 < j <=5)
1 < j оценивается первым, и это правда, так что оценивается в 1, и ваше состояние становится
if (1 <=5), что также верно, так printf("yes"); получает excuted

+0

Спасибо за ваше время –

5

Ваш вопрос немного сломан, но я считаю, что следующее разъяснит, что творится для вас:

В 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.

 Смежные вопросы

  • Нет связанных вопросов^_^