Author Topic: цикл фор начинается с инкремента  (Read 2460 times)

0 Members and 1 Guest are viewing this topic.

schaft

  • Освоившийся
  • **
  • Posts: 29
    • View Profile
С 28 строки начинается этот цикл, но на 6 итерацию уходит на sub(voskres). Почему на 6-ой?
Сори за длинный код.
Code: [Select]
$summ_glav=38
$count_glav=1
$day=1
$glava=22
$shet_glava=1
$chast=2
$shet_chast=1
$chast_dva=1
$abzac=1
$shet_abzac=1
$abzac_dva=3
$abzac_tri=4
$abzac_chetyr=3
$abzac_pyat=14
$screen=0
while($screen<1)
getscreen
IF_PICTURE_IN(0,0,$_xmax,$_ymax, "day1.bmp")
  $screen=1
  $xtemp=$_return1+10
$xday=$_return1+10 //1
$yday=$_return2+10 //1
END_IF
gosub(budni)
end_cyc

sub(budni)
for($day, $day<8)

if($count_glav=38)
traysay("Все главы записаны!")
halt
end_if

if($day=7)
$day=1
gosub(voskres)
end_if
dblclick($xday,$yday) // on day
$xday=$xday+23
wait(3)
vvod:
if((shet_glava=29)|(shet_glava=30)|(shet_glava=31)|(shet_glava=32)|(shet_glava=33)|(shet_glava=34)|(shet_glava=35)|(shet_glava=36)|(shet_glava=37)|(shet_glava=38))
inc($chast)
KEYSTRING($glava, 100)
keypress(190) // .
keystring($chast)
goto(no_abzac)
end_if
if((shet_glava=25)|(shet_glava=26)|(shet_glava=27)|(shet_glava=28))
inc($chast)
KEYSTRING($glava, 100)
keypress(190) // .
keystring($chast)
goto(no_abzac)
end_if
KEYSTRING($glava, 100)
keypress(190) // .
keystring($chast)
keypress(190) // .
keypress($abzac)
inc(abzac)
wait(1)
no_abzac:
KEYSTRING(" Харви", 100)
wait(1)
keypress(#enter)
wait(3)
if($shet_glava=28) //perehod na 23 glavu
inc($glava)
end_if
if($shet_glava=3) //22.3.1
inc(chast)
$abzac=1
end_if
if($shet_glava=7) //22.4.1
inc(chast)
$abzac=1
end_if
if($shet_glava=10) //22.5.1
inc(chast)
$abzac=1
end_if
$count_glav=$count_glav+1
inc($shet_glava)
end_cyc   
end_sub

sub(voskres)
rclick($xday,$yday)
wait(2)
getscreen
IF_PICTURE_IN(0,0,$_xmax,$_ymax, "new_event.bmp")
  lclick($_return1,$_return2)
END_IF
wait(3)
$xday=$xtemp
$yday=$yday+23
goto(vvod)
end_sub
« Last Edit: May 27, 2014, 12:08:49 PM by schaft »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: цикл фор начинается с инкремента
« Reply #1 on: May 27, 2014, 08:32:02 AM »
Версия кликера какая? подозреваю что до 4.9 судя по сабам. Поэтому всё правильно, там цикл For наращивал переменную до выполнения цикла.
Из справки:

Примечания
...
Порядок действий цикла таков. Сначала проверяется условие выполнения. Если оно истинно, то происходит наращивание параметра цикла и только затем выполняется само тело цикла.


У тебя входящее $day=1
Значит тело цикла будет идти по переменным
2,3,4,5,6,7
итого по шести... на что ты и жалуешься.
В твоём случае в цикл нужно входить с нулём $day=0, тогда как раз будет итерация по дням недели 1-7

В версии от 4.9 цикл наращивает переменную после прохождения тела цикла (когда встретит END_CYC), поэтому там тебе нужно бы было сделать, как у тебя.

P.S. Зачем вот такое условие?
Code: (clickermann) [Select]
if((shet_glava=29)|(shet_glava=30)|(shet_glava=31)|(shet_glava=32)|(shet_glava=33)|(shet_glava=34)|(shet_glava=35)|(shet_glava=36)|(shet_glava=37)|(shet_glava=38))
почему не сделать аккуратней и наглядней
Code: (clickermann) [Select]
if(($shet_glava>28) & ($shet_glava<39))

« Last Edit: May 27, 2014, 05:09:21 PM by Vint »


schaft

  • Освоившийся
  • **
  • Posts: 29
    • View Profile
Re: цикл фор начинается с инкремента
« Reply #2 on: May 27, 2014, 12:06:37 PM »
версия кликера сначала была 4.5, потом скачал 10, и в обеих версиях цикл так себя ведет .
Хотя может быть и вру. Я и ту и ту версию пробовал, и поэтому не вспомню уже, а задачу уже выполнил.
А насчет сабов, то они в 4.5 и в 10.
Quote
почему не сделать аккуратней и наглядней
Код: Clickermann
if((shet_glava>28) & (shet_glava<39))
да, это лучше будет, спасибо.
« Last Edit: May 27, 2014, 12:12:36 PM by schaft »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: цикл фор начинается с инкремента
« Reply #3 on: May 27, 2014, 12:56:23 PM »
Quote
    if((shet_glava>28) & (shet_glava<39))

Где знак доллара $ ??

Вот переделал, теперь будет работать на последней 4.10 версии.
Избавился от гото и подпрограмм. это все только усложняло читаемость кода

Code: (clickermann) [Select]
$summ_glav=38
$count_glav=1
$day=1
$glava=22
$shet_glava=1
$chast=2
$shet_chast=1
$chast_dva=1
$abzac=1
$shet_abzac=1
$abzac_dva=3
$abzac_tri=4
$abzac_chetyr=3
$abzac_pyat=14
$screen=0


start:

getscreen
IF_PICTURE_IN(0,0,$_xmax,$_ymax, "day1.bmp")
   $screen=1
   $xtemp=$_return1+10
   $xday=$_return1+10 //1
   $yday=$_return2+10 //1
END_IF

for($day, $day<8)
   
   if($count_glav=38)
      HINTPOPUP("Все главы записаны!")
      halt
   end_if
   
   if($day=7)
      $day=1
      rclick($xday,$yday)
      wait(2)
      getscreen
      IF_PICTURE_IN(0,0,$_xmax,$_ymax, "new_event.bmp")
         lclick($_return1,$_return2)
         wait(3)
      END_IF
      $xday=$xtemp
      INC($xday,23)
   ELSE
      dblclick($xday,$yday) // on day
      INC($xday,23)
      wait(3)
   end_if
   
   if(($shet_glava>24)&($shet_glava<29))
      inc($chast)
      KEYSTRING($glava, 100)
      keypress(190) // .
      keystring($chast)
   ELSE
      if(($shet_glava>28)&($shet_glava<39))
         inc($chast)
         KEYSTRING($glava, 100)
         keypress(190) // .
         keystring($chast)
      ELSE
         KEYSTRING($glava, 100)
         keypress(190) // .
         keystring($chast)
         keypress(190) // .
         keypress($abzac)
         inc(abzac)
         wait(1)
      end_if
   end_if
   
   KEYSTRING(" Харви", 100)
   wait(1)
   keypress(#enter)
   wait(3)
   if($shet_glava=28) //perehod na 23 glavu
      inc($glava)
   end_if
   if($shet_glava=3) //22.3.1
      inc($chast)
      $abzac=1
   end_if
   if($shet_glava=7) //22.4.1
      inc($chast)
      $abzac=1
   end_if
   if($shet_glava=10) //22.5.1
      inc($chast)
      $abzac=1
   end_if
   INC($count_glav,1)
   inc($shet_glava)
end_cyc

GOTO(start)
« Last Edit: May 27, 2014, 01:24:58 PM by Oraven »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: цикл фор начинается с инкремента
« Reply #4 on: May 27, 2014, 05:08:40 PM »
Я против доллара  :) ;D ;D. Долой Америку.
Даёшь переменную со знаком рубля.

Это сказывается путаница. Пишу всякую мелочь на питоне, там переменные без знаков. Уже в глазах рябит...

версия кликера сначала была 4.5, потом скачал 10, и в обеих версиях цикл так себя ведет .
Хотя может быть и вру. Я и ту и ту версию пробовал, и поэтому не вспомню уже, а задачу уже выполнил.
А насчет сабов, то они в 4.5 и в 10.
Точно ошибаешься, циклы работают по разному.
Сабы есть и там и там, но выглядят и вызываются тоже по разному.
« Last Edit: May 27, 2014, 05:12:57 PM by Vint »