loop...until 迴圈與while迴圈類似,除了loop...until 迴圈保證能執行至少一次 .
loop...until 迴圈的語法是:
loop do -- Statements to be executed. until expression |
注意的表達出現在迴圈結束,所以迴圈中的語句執行前一次測試表示式的值。
如果表示式返回 true,控制流跳回起來做,並再次執行迴圈中的語句。重複這個過程,直到表示式為 false。
#!/home/euphoria-4.0b2/bin/eui integer a = 10 loop do printf(1, "value of a : %d\n", a) a = a + 1 until a < 20 |
這將產生以下結果:
value of a : 10 value of a : 11 value of a : 12 value of a : 13 value of a : 14 value of a : 15 value of a : 16 value of a : 17 value of a : 18 value of a : 19 |
這是通常的情況下,一個迴圈的第一次疊代是某種特殊。在迴圈開始之前,有些事情必須做。它們在語句開始迴圈之前就已工作。
with entry 語句提供的目的很好。需要使用此語句與loop...until 只需新增輸入關鍵字的時候,希望在第一次疊代開始。
loop...until loop with entry 的語法是:
loop with entry do -- Statements to be executed. entry -- Initialisation statements. until expression |
在執行表示式 expression 之前,它會執行初始化語句,那麼它會作為一個正常的迴圈開始,後來這些初始化語句會成為迴圈體的一部分。
#!/home/euphoria-4.0b2/bin/eui integer a = 10 loop with entry do printf(1, "value of a : %d\n", a) a = a + 1 entry a = a + 2 until a > 20 |
這將產生以下結果:
value of a : 12 value of a : 15 value of a : 18 |
loop...until 迴圈可以有一個標籤子句之前首先 do 關鍵字。enter 子句之前或之後,可以保持標籤 label 子句。
這個標籤只是用來迴圈命名塊和標籤名稱必須用雙引號字串常數有單個或多個字。標籤關鍵字是區分大小寫的,應該寫成標籤 label .
loop...until with label 子句的語法是:
loop label "Label Name" do -- Statements to be executed. until expression |
標籤將是非常有用的,當使用巢狀迴圈。可以使用標簽名 continue 或 exit 迴圈控制語句的迴圈來控制流程。
#!/home/euphoria-4.0b2/bin/eui integer a = 10 integer b = 20 loop label "OUTER" do printf(1, "value of a : %d\n", a) a = a + 1 loop label "INNER" do printf(1, "value of b : %d\n", b) b = b + 1 if b > 25 then continue "OUTER" -- go to start of OUTER loop end if until b > 30 until a > 20 |
這將產生以下結果:
value of a : 10 value of b : 20 value of b : 21 value of b : 22 value of b : 23 value of b : 24 value of b : 25 value of a : 11 value of b : 26 value of a : 12 value of b : 27 value of a : 13 value of b : 28 value of a : 14 value of b : 29 value of a : 15 value of a : 16 value of a : 17 value of a : 18 value of a : 19 |
註: 上面的例子作解釋,但看起來像Euphoria解釋有一定的問題,它是按預期工作,可能它會被固定在未來版本的Euphoria .