Task

Show a loop which prints random numbers (each number newly generated each loop) from 0 to 19 (inclusive).

If a number is 10, stop the loop after printing it, and do not generate any further numbers.

Otherwise, generate and print a second random number before restarting the loop.

If the number 10 is never generated as the first number in a loop, loop forever.



Related tasks

   Loop over multiple arrays simultaneously
   Loops/Break
   Loops/Continue
   Loops/Do-while
   Loops/Downward for
   Loops/For
   Loops/For with a specified step
   Loops/Foreach
   Loops/Increment loop index within loop body
   Loops/Infinite
   Loops/N plus one half
   Loops/Nested
   Loops/While
   Loops/with multiple ranges


/*REXX ****************************************************************
* Three Ways to leave a Loop
* ooRexx added the possibility to leave an outer loop
* without using a control variable
* 12.05.2013 Walter Pachl
**********************************************************************/
do i1=1 To 2                           /* an outer loop              */
  Say 'i1='i1                          /* tell where we are          */
  Call random ,,123                    /* seed to be reproducable    */
  do forever                           /* inner loop                 */
    a=random(19)
    Say a
    if a=6  then leave                 /* leaces the innermost loop  */
    end
  end
 
do i2=1 To 2
  Say 'i2='i2
  Call random ,,123
  do forever
    a=random(19)
    Say a
    if a=6  then leave i2    /* leaves loop with control variable i2 */
    end
  end
 
Parse Version v
Select
  When pos('ooRexx',v)>0 Then supported=1
  Otherwise                   supported=0
  End
If supported Then Do
  Say 'Leave label-name is supported in' v
do Label i3 Forever
  Say 'outer loop'
  Call random ,,123
  do forever
    a=random(19)
    Say a
    if a=6  then leave i3          /* leaves loop with label name i3 */
    end
  end
End
Else
  Say 'Leave label-name is probably not supported in' v