位置:首頁 > 高級語言 > Euphoria教學 > Euphoria流程控製

Euphoria流程控製

程序的執行流程是指被執行的程序語句的順序。默認情況下,語句得到一個又一個的執行結果。

然而,有很多時候需要執行的順序是不同的默認順序的完成這項工作。

Euphoria有許多流程控製語句,可以用它來安排執行順序的語句。

exit 語句:

exit關鍵字,退出循環。這會導致流程立即離開當前的循環,並重新開始循環結束後的第一條語句。

語法:

exit 語句的語法:

exit [ "Label Name" ] [Number]

 exit 語句將終止的最新和最內層循環,直到指定的可選標簽名稱或號碼。

 exit N 的一種特殊形式是exit 0。這使得所有級彆的循環不管深度。最外層循環塊控製後繼續。同樣地,exit -1出口的第二最外層循環,等等。

例子:

#!/home/euphoria-4.0b2/bin/eui

integer b

for a = 1 to 16 do
   printf(1, "value of a %d\n", a)
   if a = 10 then
      b = a
      exit
   end if
end for

printf(1, "value of b %d\n", b)

這將產生以下結果:

value of a 1
value of a 2
value of a 3
value of a 4
value of a 5
value of a 6
value of a 7
value of a 8
value of a 9
value of a 10
value of b 10

break 語句:

exit語句 break語句 的工作原理完全一樣,但由 if語句或switch語句提供,而不是適用於任何形式的循環語句。

語法:

 break 語句的語法是:

break [ "Label Name" ] [Number]

break語句終止的最新和最內層的 if 或switch塊,直到指定的可選標簽名稱或號碼。

 break N 的一種特殊形式是break 0。這使得如果開關塊的最外層,不管深度。繼續控製後的最外塊。同樣,break -1,第二 if 或 switch 塊,依此類推。

例子:

#!/home/euphoria-4.0b2/bin/eui

integer a, b
sequence s = {'E','u', 'p'}

if s[1] = 'E' then
   a = 3
   if s[2] = 'u' then
      b = 1
      if s[3] = 'p' then
         break 0 -- leave topmost if block
      end if
      a = 2
   else
      b = 4
   end if
else
   a = 0
   b = 0
end if
printf(1, "value of a %d\n", a)
printf(1, "value of b %d\n", b)

這將產生以下結果:

value of a 3
value of b 1

continue 語句:

它適用於去到下一個迭代,並跳過其餘的迭代循環continue語句繼續執行。

去到下一個迭代意味著測試條件變量指數,並檢查是否仍然在一定範圍內。

語法:

 continue 語句的語法是:

continue [ "Label Name" ] [Number]

continue語句會再次重申了最新和最內層循環,直到指定的可選標簽名稱或號碼。

 continue Nr的一種特殊形式是continue 0。此重新迭代最外層循環的深度不管。同樣,從第二最外層循環continue -1開始等等。

例子:

#!/home/euphoria-4.0b2/bin/eui

for a = 3 to 6 do
   printf(1, "value of a %d\n", a)
   if a = 4 then
      puts(1,"(2)\n")
      continue
   end if
   printf(1, "value of a %d\n", a*a) 
end for

這將產生以下結果:

value of a 3
value of a 9
value of a 4
(2)
value of a 5
value of a 25
value of a 6
value of a 36

 retry 語句:

它適用於去到下一個迭代,並跳過其餘的迭代循環重試語句繼續執行。

語法:

 retry 語句的語法是:

retry [ "Label Name" ] [Number]

重試執行當前迭代的循環,它適用於語句重試。聲明跳轉到指定的循環的第一條語句,冇有測試任何東西,也遞增循環索引。

retry n 的一種特殊形式是 retry 0。此最外層循環執行的重試次數,而不管深度。同樣地,重試retry -1 的第二最外層循環等等。

通常情況下,一個子塊,其中包含了重試語句還包含另一個流控製包含退出,繼續進行或中斷,因為否則會無休止地執行迭代。

例子:

#!/home/euphoria-4.0b2/bin/eui

integer errors = 0
integer files_to_open = 10

for i = 1 to length(files_to_open) do
   fh = open(files_to_open[i], "rb")
   if fh = -1 then
      if errors > 5 then
         exit
      else
         errors += 1
         retry
      end if
   end if
   file_handles[i] = fh
end for

由於重試不改變 i 的值,並試圖再次打開相同的文件,必須有一種方式來脫離循環可由 exit 語句提供。

goto 語句:

goto語句指示計算機恢複執行代碼,在標記的地方。

地方恢複執行的語句稱為目標。它的限製在於當前的常規,如果超出任何常規或當前文件。

語法:

 goto 語句的語法是:

goto "Label Name"

一個goto語句的目標可以是任何可訪問的標簽語句:

label "Label Name"

標簽名稱必須用雙引號的字符串常量。那將是非法的,在Euphoria 標識符的字符可能出現在一個標簽名稱,因為它是一個普通的字符串。

例子:

#!/home/euphoria-4.0b2/bin/eui

integer a = 0

label "FIRST"
printf(1, "value of a %d\n", a)
a += 10
if a < 50 then
   goto "FIRST"
end if 
printf(1, "Final value of a %d\n", a)

這將產生以下結果:

value of a 0
value of a 10
value of a 20
value of a 30
value of a 40
Final value of a 50