2015-10-24 2 views
-2

Я снова пересматриваю C и делаю некоторые тестовые программы. В одной программе я проверял условие, которое было переведено в это условие.Вывод этой программы на C я не могу понять

#include <stdio.h> 
int main() 
{ 
if(0 <= 3000.000000 <= 2000.00){ //this is the condition 
printf("3000 is less than 2000, whoa.. \n"); 
} 
return 0; 
} 

Выходной сигнал всегда является этой строкой печати. Я не понимаю, почему.

P.S

Я тестирование среднего значения, т.е. +3000,000000 здесь, но это может быть какой-либо переменной.

+3

Возможный дубликат [Что означает «Сравнение констант с булевым выражением всегда верно»? Предупреждение означает?] (Http://stackoverflow.com/questions/30807947/what-does-comparing-constant-with-boolean-expression- is-always-true-warning-me) –

ответ

6

условие обрабатывается следующим образом:

if((0 <= 3000.000000) <= 2000.00){ 

Первая часть, (0 <= 3000.000000), правда, и вычисляет 1 в сравнении с 2000.00. И 1 <= 2000.00 это правда.

Если вы пытаетесь проверить, лежит ли значение a между двумя значениями b и c или равна либо, то вам необходимо выражение вдоль линий

(a >= b) && (a <= c) 
+3

Слишком быстрая XD. Я не могу опубликовать свой ответ перед вами, и я не могу комментировать, чтобы рассказать вам о вашей опечатке, прежде чем вы ее исправите. – Arc676

+0

ahh правила ассоциативности ... –

+0

Я имел в виду первое редактирование, в котором вы изменили 'false' на' true'. – Arc676

4

Вы попасться тот факт, что в C булевы являются целыми числами: либо 0, либо 1.

Так что линия интерпретируется слева направо: сначала 0 <= 3000, что верно, так что она заканчивается как 1. Затем это значение подается в следующую половину, (1) <= 2000, что, очевидно, верно.

3

Он напечатает строку в printf.

Потому что состояние статическое.

0 всегда меньше 30000.000000. Для следующего условия выход первого условия возвращается 1. он проверяет использование 1.

Вторая проверка состояния - 1 < = 2000.00. Это условие также верно.

Итак, только это печатает строку.

0

первое условие оценивается как 1 как результат и далее 1 < 2000 проверено, что также верно. Так, строка печатается.

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