Почему BoolToStr(true) = '-1'?[Решено]

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Почему BoolToStr(true) = '-1'?[Решено]

Сообщение tech » 08.05.2011 11:30:21

Делали с учащимися микропроект в Lazarus по учебнику (Delphi).
Помимо прочего, задание включает следующий алгоритм:
1. Считываем из двух текстовых полей нули или единицы.
2. Выполяем логическую операцию (and или or).
3. Результат отображаем в метке.

Для преобразования string в boolean и обратно используем функции StrToBool и BoolToStr соответственно.

Удивляюсь, когда оказывается, что BoolToStr возвращает '-1', а не '1', если переданная ей лог.переменная имеет значение true.
Приходится "обходить" '-1' примерно так:
Код: Выделить всё
...
var and1:boolean;
...
and1 := StrToBool(Edit1.Text) and StrToBool(Edit2.Text);
if and1 := true then Label1.Caption := '1'
else Label1.Caption := '0';
...

Может быть не надо так делать и есть другая функция, которая возвращает '1'?
Почему StrToBool превращает '1' в true, а BoolToStr превращает true в '-1'?
Последний раз редактировалось tech 08.05.2011 21:53:11, всего редактировалось 1 раз.
tech
незнакомец
 
Сообщения: 8
Зарегистрирован: 10.10.2010 13:05:20

Re: Почему BoolToStr(true) = '-1'?

Сообщение svk12 » 08.05.2011 14:29:12

Вот описание функции:
http://www.freepascal.org/docs-html/rtl ... tostr.html
Чтобы получить 'True' или 'False', надо вызвать функцию со вторым параметром =True.
Также можно подсунуть ей свои строки для 'True' и 'False'...
svk12
постоялец
 
Сообщения: 408
Зарегистрирован: 09.06.2008 18:42:47

Re: Почему BoolToStr(true) = '-1'?

Сообщение devels » 08.05.2011 19:39:45

Честно говоря меня эта фича-бага тоже всегда удивляла, только вот непонятно, откуда у нее ноги растут.
devels
постоялец
 
Сообщения: 137
Зарегистрирован: 01.09.2010 12:14:38

Re: Почему BoolToStr(true) = '-1'?

Сообщение Mr.Smart » 08.05.2011 19:50:50

Всё очень просто:
  • False = 0;
  • True = любое отличное от 0.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Почему BoolToStr(true) = '-1'?

Сообщение Иван Шихалев » 08.05.2011 21:06:53

Ноги растут из того, что not 0 = -1 ($FFFF... в зависимости от размерности)
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Re: Почему BoolToStr(true) = '-1'?

Сообщение tech » 08.05.2011 21:52:12

svk12 писал(а):Вот описание функции:
http://www.freepascal.org/docs-html/rtl ... tostr.html
Чтобы получить 'True' или 'False', надо вызвать функцию со вторым параметром =True.
Также можно подсунуть ей свои строки для 'True' и 'False'...


Т.е. код может выглядеть так, если требуется вывести строки 'True' или 'False':
Код: Выделить всё
...
var a:boolean;
...
a := StrToBool(Edit1.Text) and StrToBool(Edit2.Text);
Label1.Caption := BoolToStr(a,true);
...

Или так, если выводим '1' или '0':
Код: Выделить всё
...
Label1.Caption := BoolToStr(a,'1','0');
...
tech
незнакомец
 
Сообщения: 8
Зарегистрирован: 10.10.2010 13:05:20

Re: Почему BoolToStr(true) = '-1'?[Решено]

Сообщение svk12 » 09.05.2011 01:31:07

Или даже так:
Код: Выделить всё
...
Label1.Caption := BoolToStr(a,'Стопудово!','Фуфло!');
...
svk12
постоялец
 
Сообщения: 408
Зарегистрирован: 09.06.2008 18:42:47


Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

Рейтинг@Mail.ru