Author Topic: После инпутБокса условие срабатывает неверно, а не должно  (Read 2431 times)

0 Members and 1 Guest are viewing this topic.

Cleoss

  • Активный участник
  • ***
  • Posts: 260
  • Автоматизируй это!
    • View Profile
Привет, енотег Джо!

В одном моём скрипте есть такие строки:
Code: (clickermann) [Select]
$dt=strconcat($_date_d,".",$_date_m,".",$_date_y)
//$dte=$_date_str
$dte=inputbox("Plz input a date below! (dd.mm.yyyy) ",$dt,60)
//wait(1)
if($dte=0)
   $dte=strconcat($_date_d,".",$_date_m,".",$_date_y)
end_if
Причём что интересно, что в текущей версии кликера .007 условие ложно срабатывает? хотя не должно, поскольку величина после ввода в инпутбокс явно не равна 0, а условие всё равно срабатывает и тем самым портит дальнейшую логику скрипта (меняет дату с введённой на текущую). Придётся закомментить блок и остаться без альтернативной версии кода для кликеров без поддержки переменной $_date_str. Ещё интересно, по чьей же вине это? По вине инпута или ифа? Или получается, парсер кликера заранее предобрабатывает переменные скрипта без учёта изменений в инпуте?

И да, вчера новёхонькая версия преподнесла ещё сёрпрайз, надо б забагтречить его в новой теме но лень. Долго ли, коротко ли  набирал скрипт, набирал, отошёл. Вернулся, запустил скрипт заново. И вдруг.. Он не запускается, нету даже звука запуска. Думаю перезапуститься, сохраняюсь (!!!) и закрываю редактор, выскакивает бесконечное предложение сохранить работу (но не сохраняет -- знакомая схема). Попа чувствует неладное, но молчит. Запускаю кликер снова, открываю скрипт, над которым работал, а он пустой, ноль байт. А теперь внимание вопрос: КУДА девался бекап?

ЗЫ. Порыскал по всем подпапкам кликера (надеялся, работа не насмарку), бекапа не нашёл, а раньше был же. Щас версия 007.
« Last Edit: December 30, 2017, 09:14:36 AM by Cleoss »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
У меня 4.13.007 вообще выдает ошибку в условии. Оно и понятно, ты ведь пытаешься сравнить строку с числом. Хотя по идее ошибку выдавать не должно.

Вообще не понятно причем тут 0. Пустую строку можно определить таким образом
Code: (clickermann) [Select]
$dt=$_date_str
$dte=inputbox("Plz input a date below! (dd.mm.yyyy) ",$dt,60)
if($dte="")
   LOGWRITE ("Сработало")
   $dte=$_date_str
end_if

LOGWRITE ($dte)

HALT

Cleoss

  • Активный участник
  • ***
  • Posts: 260
  • Автоматизируй это!
    • View Profile
У меня 4.13.007 вообще выдает ошибку в условии. Оно и понятно, ты ведь пытаешься сравнить строку с числом. Хотя по идее ошибку выдавать не должно.

Вообще не понятно причем тут 0. Пустую строку можно определить таким образом


Посмотрел, и оказывается, у меня стоит подавление ошибок, но то ладно. Оно мне щас пригодится для отладки.  8)

А вот с нулём имхо всё понятно. Если кликер старый, то переменная $_date_str вернёт ноль, и если переменная $dte будет не задана, то тоже вернёт ноль. Поэтому и сравниваем с нулём переменную, которая по иронии оказывается текстовой. Ну а что ж это за иф такой, если он не может выполнить своё предназначение и сообщить, верно ли условие. Его дело простое, если равно -- скажи "да", не равно -- скажи "нет", здесь не надо подробностей про то почему не равно или почему равно и прочей философии. Просто "да" или "нет".

А зачем в таком контексте сравнивать переменную с ""? Она же пустой строкой всё равно не станет. И кстати, Андрей, там случайно в кликере не завалялось старых функций для приведения типов? Спасибо за ответ!
« Last Edit: December 30, 2017, 04:08:28 PM by Cleoss »

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile

да, действительно, у меня пока версия 13.006, в условиях не работает сравнение чисел со строками, выдает ошибку.

Code: (clickermann) [Select]
//ошибка
if(1="text")//если сменить сравнение числа с числом или наоборот, то ошибки нет
   print("стаботало")
end_if
haltt

ранее, чтобы отличить текст от строк, использовал вот такое действо - http://crapware.aidf.org/forum/index.php?topic=1724.msg9797#msg9797

обязательно нужно исправлять!!!

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Ну а что ж это за иф такой, если он не может выполнить своё предназначение и сообщить, верно ли условие. Его дело простое, если равно -- скажи "да", не равно -- скажи "нет", здесь не надо подробностей про то почему не равно или почему равно и прочей философии. Просто "да" или "нет".
Да вы, батенька, идеалист  :)
Тут писатели языков постоянно компромиссы ищут, что делать при сравнении разных типов. И при явном и при неявном.
В языках со строгой типизацией обычно даже сравнивать нельзя. Просто тупо не дают выбрасывая ошибку. В других... везде по разному.
Вон в Яваскрипт тоже п. творится. Там бы пришлось писать много разгневанных постов. Слава богу я в такое болото не лезу.
« Last Edit: April 24, 2018, 08:19:36 AM by Vint »


Singularity

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Оно и понятно, ты ведь пытаешься сравнить строку с числом.

Вообще не понятно причем тут 0.
Если в окно inputbox вводится число, то его вполне корректно можно сравнивать с числами с помощью различных условий, несмотря на то, что данная функция строковая. Проверено не раз. А проверку на пустую строку можно осуществить также с помощью if(strlen($var)>0), если условие верно, значит строка не пустая.