Author Topic: Цикл FOR, Баг или фича  (Read 5685 times)

0 Members and 1 Guest are viewing this topic.

aden

  • Оплот сообщества
  • ****
  • Posts: 363
    • View Profile
Цикл FOR, Баг или фича
« on: July 01, 2014, 02:34:52 PM »
Code: (clickermann) [Select]
SUB(heal_)
$skip=0
print("heal")
for($vyn, $vyn<4)
getscreen
colormode(8)
IF_PICTURE_IN (273,877,480,938, STRCONCAT("img\vyn",$vyn,".bmp"), -1, 100)     
print("ïüåì âûíó")
LCLICK($_return1+10,$_return2+10)
$vyn=5
$heals=5   // картинка найдена второй цикл необходимо пропустить!!!!
END_IF
END_CYC

for($heals, $heals<3)
getscreen
colormode(8)
IF_PICTURE_IN (273,877,480,938, STRCONCAT("img\heals",$heals,".bmp"), -1, 100)     
print("ïüåì ýëèê")
LCLICK($_return1+10,$_return2+10)
$heals=5
END_IF
END_CYC
END_SUB

пробывал goto но толи лыжи не едут толи в циклах он очень неработает да и некомильфо этот goto.

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

Code: (clickermann) [Select]
if($skip=1)  // переменная объявленная в первом цикле
goto(end) // перескакиваем через второй цикл сразу в конец
end_if

может кому в голову придет как элегантнее это реализовать?
« Last Edit: July 01, 2014, 02:38:43 PM by aden »

Johnny

  • Создатель
  • Герой форума
  • *
  • Posts: 593
    • View Profile
Re: Цикл FOR, Баг или фича
« Reply #1 on: July 01, 2014, 03:11:03 PM »
вон там где $skip=1 пишешь $skip=0 а внутрь вместо богомерзкого goto пихаешь все что тебе нужно пропустить

в чем суть вопроса то я не понял? раздел еще такой, нервный, выбрали

aden

  • Оплот сообщества
  • ****
  • Posts: 363
    • View Profile
Re: Цикл FOR, Баг или фича
« Reply #2 on: July 01, 2014, 03:13:43 PM »
столкнулся с поведением которого неожидал.
осознал, буду внимательнее.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Цикл FOR, Баг или фича
« Reply #3 on: July 01, 2014, 03:23:28 PM »
столкнулся с поведением которого неожидал.
осознал, буду внимательнее.

Ничего неожиданного нет, FOR обнуляет переменную при начале цикла. так что твоя 5 превратилась в 0

Code: (clickermann) [Select]
SUB(heal_)
   $skip=0
   print("heal")
   for($vyn, $vyn<4)
      getscreen
      colormode(8)
      IF_PICTURE_IN (273,877,480,938, STRCONCAT("img\vyn",$vyn,".bmp"), -1, 100)
         print("пьем выну")
         LCLICK($_return1+10,$_return2+10)
         $vyn=5
         $skip=1   // картинка найдена второй цикл необходимо пропустить!!!!
      END_IF
   END_CYC
   
   IF($skip=0)
      for($heals, $heals<3)
         getscreen
         colormode(8)
         IF_PICTURE_IN (273,877,480,938, STRCONCAT("img\heals",$heals,".bmp"), -1, 100)
            print("пьем элик")
            LCLICK($_return1+10,$_return2+10)
            $heals=5
         END_IF
      END_CYC
   END_IF
END_SUB

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Цикл FOR, Баг или фича
« Reply #4 on: July 01, 2014, 05:13:34 PM »
Чё это она обнуляет при начале? В 4.10 это решили ведь.
Вот в конце обнуляет.


Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Цикл FOR, Баг или фича
« Reply #5 on: July 01, 2014, 07:10:21 PM »
Чё это она обнуляет при начале? В 4.10 это решили ведь.
Вот в конце обнуляет.
v4.10.002
Code: (clickermann) [Select]
$a = 2

FOR($a,$a<3)
  PRINT($a)
END_CYC

HALT

Лог:
Code: [Select]
20:09:22 0
20:09:22 1
20:09:22 2

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Цикл FOR, Баг или фича
« Reply #6 on: September 29, 2014, 05:21:03 PM »
Чёт эту тему не разжевали, некоторые не поняли. Переменную обнуляет, если не задана в самом FOR.
Такой себе костыль.
Преведущий пример по вопросу ТС должен выглядеть так
Code: (clickermann) [Select]
    $b = 2
     
    FOR($a=$b,$a<3)
     PRINT($a)
    END_CYC
     
    HALT
Тогда всё будет, как хотел ТС