Что нового

Перезапуск цикла Do с помощью ContinueLoop

ggzgamer

Осваивающий
Сообщения
134
Репутация
23
Как происходит перезапуск цикла Do..Until с помощью ContinueLoop?
Пробовал разобраться сам и пришёл к выводу, что тут возможен баг.
Почему цикл не перезапускается после использования ContinueLoop, а просто происходит выход из цикла, причём не выводится MsgBox перед словом Until.
Код:
MsgBox(0, 'Start prog', 'Start')
Do
	MsgBox(0, 'Cycle Do', 'Begin Do')
	For $i=0 To 10 Step 1
		$Count=$i
		$Res=MsgBox(2, 'Cycle For', 'Счётчик='&$i&@CRLF&'Прервать цикл?')
		If $Res=3 Then
			MsgBox(0, 'For, i='&$i, 'Цикл For прерван')
			ExitLoop
		EndIf
	Next
	If $Count<=5 Then
		MsgBox(0, 'Cycle Do', 'Счётчик не достиг значения больше 5 и равен '&$Count&@CRLF&'Перезапускаем цикл Do с помощью ContinueLoop')
		ContinueLoop
	Else
		ExitLoop
	EndIf
	MsgBox(0, 'Cycle Do', 'Сейчас находимся перед словом "Until"')
Until 1
MsgBox(0, 'Exit prog', 'Exit')
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Потому что ContinueLoop не перезапускает цикл, а выполняет переход на конец цикла. То есть в твоём коде ContinueLoop означает "перейти на строчку со словом Until".
А чтобы цикл продолжался тебе нужно поставить
Код:
Until 0

Причём до MsgBox перед словом Until скрипт не доходит НИКОГДА - ты либо переходишь к концу цикла, если $Count<=5, ли бо выходишь из цикла вообще, если $Count>5.
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
MsgBox(0, 'Start prog', 'Start')
Do
    MsgBox(0, 'Cycle Do', 'Begin Do')
    For $i=0 To 10
        $Count=$i
        $Res=MsgBox(2, 'Cycle For', 'Счётчик='&$i&@CRLF&'Прервать цикл?')
        If $Res=3 Then
            MsgBox(0, 'For, i='&$i, 'Цикл For прерван')
            ExitLoop
        EndIf
    Next

    If $Count<=5 Then
        MsgBox(0, 'Cycle Do', 'Счётчик не достиг значения больше 5 и равен '&$Count&@CRLF&'Перезапускаем цикл Do с помощью ContinueLoop')
        ContinueLoop
    Else
		ExitLoop
    EndIf
    MsgBox(0, 'Cycle Do', 'Сейчас находимся перед словом "Until"')
Until $Count=11
MsgBox(0, 'Exit prog', 'Exit')
 
Автор
G

ggzgamer

Осваивающий
Сообщения
134
Репутация
23
Значит понял, что после ContinueLoop происходит переход(наподобие goto) к проверке условия выхода из цикла и уже потом по результатам этого условия либо возобновление, либо выход.
Значит для перезапуска необходимо ложное условие.

А как тогда обстоят дела с циклом While..WEnd при использовании ContinueLoop?
По идее переход к началу, проверка условия и последующее выполнение?
 
Верх