C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Глюк или где?
Borgir
Отправлено: 07.10.2003, 07:01


Дежурный стрелочник

Группа: Участник
Сообщений: 48



Интересную вещь заметил. Есть у меня в программе некая переменная Answer типа AnsiString. И есть например такой текст:
CODE

 if(!Answer.Length()<12)
 {
   ShowMessage(IntToStr(Answer.Length()));
 }

Так вот, при длине этой переменной равной 0, ShowMessage все равно срабатывает. Интересно, это глюк или я что-то не так делаю?
Asher
Отправлено: 07.10.2003, 08:11


Мастер участка

Группа: Модератор
Сообщений: 550



По моему wink.gif if(!Answer.Length()<12) кривая конструкция. Или пиши что тебе надо конкретно — if(Answer.Length()>=12) или не экономь скобки -
if(!(Answer.Length()<12))

P.S. не экономь скобки — время отладки стоит дороже.
не помню кто сказал, но в умной книжке cool.gif
Borgir
Отправлено: 07.10.2003, 12:16


Дежурный стрелочник

Группа: Участник
Сообщений: 48



Я естесственно написал по-другому (первый вариант Asher'а), но просто мне стало интересно, почему не работает первоначальная запись? В чем ее кривость?
Asher
Отправлено: 07.10.2003, 12:39


Мастер участка

Группа: Модератор
Сообщений: 550



В порядке выполнения операций.
! выполнится первой.

предположим Answer.Length()=5, тогда
!Answer.Length() = 0 и все это < 12

если Answer.Length()=0, то после ! там будет 1, что все равно меньше 12

Вернуться в Вопросы программирования в C++Builder