Приколы с IF

 

Напоролся на такой глюк. В функции OnTimer :

// Этот код не работает - при дебаге он пропускается, а при работе игнорируется -  sutki>0 && sutki<1  . Т.е если знак больше в первом условии и во втором уже не важно какой знак. 

if (sutki>0 && sutki<1) { sutki=0;  }

// Такой код работает. т.е. если первое условие  sutki>=0  со знаком >=

if (sutki>=0 && sutki<1) { sutki=0;  }

// Такой код работает т.е. если условие одно и знак больше то sutki > 0 - работают. 

if ( sutki > 0 ) { sutki=0;  }


Вот попробуйте. Будет у вас этот код работать ? Не важно что в самой функции. главное именно знак >  в первом условии if (). 

int sutki=0;
if (sutki>0 && sutki<1) { sutki=0;  }

 
andreysneg:

Напоролся на такой глюк. В функции OnTimer :

// Этот код не работает - при дебаге он пропускается, а при работе игнорируется -  sutki>0 && sutki<1  . Т.е если знак больше в первом условии и во втором уже не важно какой знак. 

if (sutki>0 && sutki<1) { sutki=0;  }

...

int sutki=0;
if (sutki>0 && sutki<1) { sutki=0;  }

я вот даже представить не могу как такое условие может сработать..и в этом плане - целиком солидарен с компилятором, это условие должно игнорироваться как константно-ложное в компил-тайме

 
andreysneg:
Напоролся на такой глюк

Может Вам нужно "Или", а не "И"?

Или не знаю, что между двумя целыми числами, у которых шаг изменения единица, можно найти.

 
andreysneg:

Напоролся на такой глюк. В функции OnTimer :

// Этот код не работает - при дебаге он пропускается, а при работе игнорируется -  sutki>0 && sutki<1  . Т.е если знак больше в первом условии и во втором уже не важно какой знак. 

if (sutki>0 && sutki<1) { sutki=0;  }

// Такой код работает. т.е. если первое условие  sutki>=0  со знаком >=

if (sutki>=0 && sutki<1) { sutki=0;  }

// Такой код работает т.е. если условие одно и знак больше то sutki > 0 - работают. 

if ( sutki > 0 ) { sutki=0;  }


Вот попробуйте. Будет у вас этот код работать ? Не важно что в самой функции. главное именно знак >  в первом условии if (). 

int sutki=0;
if (sutki>0 && sutki<1) { sutki=0;  }

Читайте предупреждения компилятора после компиляции. И вносите соответствующие правки в код. 
 
Сегодня уже этот код работает. Вчера не хотел. И mt перезагружал. А сегодня всё норм. Тем более веселее глюк. ну ладна.
 
andreysneg #:
Сегодня уже этот код работает. Вчера не хотел. И mt перезагружал. А сегодня всё норм. Тем более веселее глюк. ну ладна.

Это будет работать только при условии, если переменная со странным названием " sutki" будет иметь число больше "0", но меньше "1"

К примеру sutki=0.5;

if (sutki>0 && sutki<1) { sutki=0;  }
 
Vitaly Muzichenko #:
переменная со странным названием " sutki"

Это термин рынка аренды жилья.

 
andreysneg:

Напоролся на такой глюк. В функции OnTimer :

// Этот код не работает - при дебаге он пропускается, а при работе игнорируется -  sutki>0 && sutki<1  . Т.е если знак больше в первом условии и во втором уже не важно какой знак. 

Вы не правы! Это конъюнкция. Она истинна только если оба конъюнкта истинны. Вот таблица истинности:

В Вашем случае высказывание А эквивалентно выражению  sutki>0, а высказывание В эквивалентно выражению  sutki<1

То есть, если знак больше в первом условии, то чертовски важен знак во втором условии.

Если бы формула была не "А и В", а "А или Б", то при истинности А уже было бы не важно значение истинности В. Понимаете о чём я? Это не глюк, это не верное понимание булевой алгебры.