以下のプログラムの実行結果を予想してみましょう。
#prompt
Dim K As Double
K=0
While K>=0
K=K+1
Print K^2
Wend
最初のKの値が0で,K>=0を満たすからループの中へ入ります。そしてKの値を1増やしてから,Kの2乗の値(1)を表示します。そしてK=1だからK>=0を満たしているのでループを繰り返します。・・・あれ?
Kは増える一方ですから,ループから出られませんね??
このような状態を無限ループと言います。無限ループになってしまうとプログラムが終了しなくなってしまいますので,ウィンドウ右上の「×」ボタンで閉じるよりなくなってしまいます(Win9x系のOSならば強制終了するよりなくなってしまうでしょう)。
なお場合によっては,あえて無限ループを作る場合もあります。といっても実際には,無限ループっぽいものを作っておいて,ループの中でループから抜け出す方法を作っておくのです。
Dim V As Long
Do
Print "1.名前を表示"
Print "2.URLを表示"
Print "3.終了"
Input ">",V
Select Case V
Case 1
Print "Sinryow"
Case 2
Print "http://www.sinryow.net/"
Case 3
Exit Do
End Select
Loop
まず,Do 〜 Loopの使い方に注目してみましょう。WhileもUntilもないDo〜Loop文は,無条件にループを繰り返してしまいます。これだけだと無限ループになってしまいますが,ここで注目するのはExit Doです。これは強制的にDoループを抜けるために使用します。
注:この他に「Exit Sub」,「Exit Function」もあります(Lesson 12・13を参照。)
問16 Lesson 8で出した以下のプログラムを,上の例のように,条件のないDo 〜 LoopとExit Doを用いて書き換えなさい。
#prompt
Dim password As String
While password<>"sinryow"
Input "パスワード>";password
Wend
Print "正しいパスワードが入力されました。"
最後にですが,ループを途中で打ち切ってループの始めからやり直す方法を紹介します。(あまり使いませんので,頭の片隅にとどめておく程度でよいです。)
#prompt
Dim i As Integer
For i=1 To 7
If i=5 Then
Continue
End If
Print i^2
Next
実行結果
1 4 9 16 36 49
For・While・Doループの中のいずれかの中で Continue が実行されると,制御がループの最初に移動します。この場合i=5のときにContinueで制御がループの最初に戻されるので,5^2(=25)は表示されずに終わります。