Автокликер Clickermann :: Форум

Основной раздел => Ошибки => Архив => Topic started by: Кликермен on February 05, 2016, 10:56:32 PM

Title: странный глюк, цикл for
Post by: Кликермен on February 05, 2016, 10:56:32 PM
Code: (clickermann) [Select]
//===================================
FOR($num=0, $num<arrsize($num_line_start))
   FOR ($y=$y2_cap, $y>$y1_cap, -1)
      FOR($x=$num_line_start[$num],$x<$num_line_end[$num]+1)
         IF(pxl($x,$y)  = 0)
            ARRPUSH($num_y2,$y)
            $y=0
            $x=$num_line_end[$num]+1
           
         END_IF
      END_CYC
      print( $y, " ",$y1_cap )
   END_CYC
END_CYC

здесь $y2_cap=347, $y1_cap=334. Цикл пашет  от 347, вниз. НО! после первого прохода цикла, он ругается на inc($y,-1) и работать не хочет. я долго бился, не мог найти корень, как исправить.  если прописать

Code: (clickermann) [Select]
   FOR ($y=347, $y>$y1_cap, -1) То все работает идеально.
print($y1_cap+1) выдает в лог 348, все верно. почему же такая хрень?
пробую писать
Code: (clickermann) [Select]
$mm=$y2_cap
 FOR ($y=$mm, $y>$y1_cap, -1)
Но тоже вылетает ошибка inc($y,-1)
Решил вот так, но все же интересно, что это за хрень))
 
Code: (clickermann) [Select]
$y2_cap = $mm+$y2_cap//мм ноль, поэтому ничего не меняется, но  ошибка пропала
  FOR ($y=$y2_cap, $y>$y1_cap, -1)
Код во вложении, 76 строка. проверял капчу на этой странице  http://wekings.ru/login
Title: Re: странный глюк, цикл for
Post by: Vint on February 08, 2016, 12:22:31 PM
Всё таже старая ошибка
http://crapware.aidf.org/forum/index.php?topic=2221.msg13411#msg13411

Проблема не в циклах а в извлечении из массива. Здесь:
Code: (clickermann) [Select]
$y2_cap=ARRPOP($cap_arr)
ARRPOP читает любую переменную как строку.
всякие вычисления проверяют, можно ли переменную перевести в число и если можно переводят, поэтому после
Code: (clickermann) [Select]
$y2_cap = $y2_cap + 0$y2_cap будет уже число.

Цикл For в принципе состоит из двух частей, проверки условия и наращивание переменной. Во всех проверках условий число восстанавливается правильно из строки. А наращивалка видать осталась нетронута со старых версий и проверки как в вычислениях выше не происходит. Да и хорошо.


Проще запомнить, если вытаскиваешь по ARRPOP, а не по индексу то лучше сразу приводить к числу.
Для целых
Code: (clickermann) [Select]
$y2_cap = INT(ARRPOP($cap_arr))
Ну или
Code: (clickermann) [Select]
$y2_cap = ARRPOP($cap_arr)+0
Или доставать по индексу если можно
Code: (clickermann) [Select]
$y2_cap = $cap_arr[ARRSIZE($cap_arr-1)]
Title: Re: странный глюк, цикл for
Post by: dramster on February 10, 2016, 09:12:41 PM
тоже часто напарываюсь на путанницу между строками и числами в массивах. но если перевести строку в число - это уже вошло в привычку INT(), то бывают засады в обратном:
Code: (clickermann) [Select]
STRSEPARATE ("mail@mail.ma:001230", ":", $arr)
print("log:", $arr[0])
print("pass:", $arr[1])
print("arrpop:",arrpop($arr))
halt
Code: [Select]
21:12:38 log:mail@mail.ma
21:12:38 pass:1230
21:12:38 arrpop:001230
Title: Re: странный глюк, цикл for
Post by: i0 on February 10, 2016, 11:23:30 PM
угу, строку в число - int()
или $var= $var / 1  для дробных

а в обратном использую самописную подпрограмму разбиения строки на массив вместо strseparate, чтобы гарантированно получать строки при обращении по индексу
Title: Re: странный глюк, цикл for
Post by: Johnny on February 11, 2016, 12:08:41 PM
Все вышеописаное - недочеты конкретных функций. Что separate, что inc (используемый в for), что ранее tfReadArr, но аналогично будут пофиксены с последним обновлением.
Title: Re: странный глюк, цикл for
Post by: Vint on February 11, 2016, 02:59:36 PM
Про точку не забыл? Которая в 0 превращается.
"."  = 0
Title: Re: странный глюк, цикл for
Post by: Johnny on February 11, 2016, 03:07:59 PM
Забыл. Я же просил список багов. Я же не могу все сообщения читать.
И у вас темы называются типа "Бот для рыбалки глючит, помогите!" а внутри описание как кликер крашит систему.

Че там с точкой. Есть пример кода?
Title: Re: странный глюк, цикл for
Post by: Vint on February 11, 2016, 03:27:42 PM
ну как- то так
Code: (clickermann) [Select]
IF(STRCUT("цена 7389.014", 10, 1) = 0)
   LOGWRITE ($n)
END_IF
IF(STRCUT("цена 7389.014", 11, 1) = 0)
   LOGWRITE ($n)
END_IF

Короче если в строке остаётся одна точка, многие функции переводят её в 0

Вот ещё
http://crapware.aidf.org/forum/index.php?topic=356.msg8215#msg8215
Title: Re: странный глюк, цикл for
Post by: Johnny on February 11, 2016, 05:38:33 PM
можно еще проще
Code: (clickermann) [Select]
IF("." = "0")
   LOGWRITE ("oops")
END_IF

я так понимаю это только в проверке условия такая фигня. ну посмотрю завтра. завтра же наверно и запилю очередню бетку на выходные поиграться. так уже много чего пофиксил из старого
Title: Re: странный глюк, цикл for
Post by: Vint on February 11, 2016, 06:10:58 PM
Не только. При передаче в подпрограмму слетит. Может ещё где.
Title: Re: странный глюк, цикл for
Post by: Johnny on February 13, 2016, 03:06:54 PM
точечка оказалась не так проста, ее считает нулем сам компилятор (видимо но аналогии с С) и переубеждать его в этом - занятие долгое.
в условиях, где она и может вызвать самый диссонанс у юзера, починил. но если кто то решит пихнуть точку в качестве числового аргумента, она все же будет нулем. наверное.

извольте учитывать типы данных. программы на других языках просто бы выплюнули исключение и завершили выполнение.