2014-01-03 4 views
0

я реализовал следующую программу в CПочему условие типа (0 <a <5) всегда верно?

#include <stdio.h> 
    int main() 
    { 
     int a = 10 ; 
     if(0 < a < 5) 
     { 
      printf("The condition is true!") ; 
     } 
     return 0 ; 
    } 

Почему условие 0<a<5 всегда возвращают true?

+1

Вы, вероятно, хотите '0 <а && а <5' выразить математическое выражение, которое вы показать здесь. – RageD

+1

Это жуткая ошибка. Есть очень мало языков, которые позволяют вам делать сложные сложные условия, подобные этому. – Linuxios

+1

@Linuxios: Python - это язык, который позволяет вам писать тесты диапазона. –

ответ

4

Потому что 0 < a оценивает по методу 1.

Использование:

a > 0 && a < 5

, если вы хотите, чтобы проверить, если a больше 0 и ниже 5.

0

Поскольку 0 меньше 10, 0 < a всегда имеет значение 1, что меньше, чем 5, что делает 0 < a < 5 всегда true. Измени условие

if(0 < a && a < 5) {...}  
12

В отличие от Python, C оценивает состояние как:

(0 < a) < 5 

Результат (0 < a) либо 0 или 1, оба из которых меньше 5, так что общее состояние правда.

В C, тестовый диапазон должен быть написан:

0 < a && a < 5 

Обратите внимание, что сценарий Python:

for a in range(-1,7): 
    if 0 < a < 5: 
    print a, " in range" 
    else: 
    print a, " out of range" 

производит вывод:

-1 out of range 
0 out of range 
1 in range 
2 in range 
3 in range 
4 in range 
5 out of range 
6 out of range 

'эквивалентный' C программа, использующая то же самое условие if, будет, конечно, производить ответ «в диапазоне» для каждого значения.

0
if(x<y<z) 

Это действительно допустимый синтаксис, но он не делает то, что вы хотите.

Поймите, что x<y возвращает bool, то есть true или false. Затем вы сравниваете его с любым значением «z». Таким образом, намерение «x<y<z» выглядит неправильно.

Это может быть:

if(x < y && y < z) 
+1

Скопировано без attrubtion с http://www.mofeel.net/1094-comp-lang-c++/2999.aspx или с http://bytes.com/topic/c/answers/805129-can-you-do- if-xyz-fctn1 –

+0

@Pekka 웃: Вы ошибаетесь .. я не копировал его !! –

+0

Итак, кто-то написал в 2008 году * точные слова *, которые вы придумали, совершенно независимо, в 2013 году? Ты серьезно? –

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