QBasic/流程控制
為了在程式的兩個或多個部分之間選擇執行,可以使用 IF 語句。也可以使用 WHILE、DO UNTIL 和 CASE 語句。所有這些都透過使用布林邏輯“測試”來控制條件執行,其結果要麼是 TRUE 要麼是 FALSE。要將一段程式碼重複執行一定次數,可以使用 FOR 語句。
IF 測試可以在單行中執行,但也可以像其他語句一樣用於控制程式碼塊。
布林邏輯是一種測試,它產生兩種可能的結果之一:真或假。測試本質上總是數學的……當兩個字元(或字串)被“比較”時,使用的是它們的 ASCII 碼(因此 a < b 和 b < A)。
qbasic 中使用的比較運算子是:= 如果兩個變數相等則為真 < 如果第一個小於第二個則為真 =< 如果第一個小於或等於第二個則為真 > 如果第一個大於第二個則為真 >= 如果第一個大於或等於第二個則為真 <> 如果兩個不相等則為真
可以使用“AND”、“OR”和“NOT”運算子將多個測試連結在一起。我們稍後將詳細介紹這些運算子的含義,但你可能已經理解了前兩個運算子。
QBasic 中最實用的語句之一是 IF 語句。它允許你根據給定的條件選擇程式將執行的操作。接下來的幾個程式將介紹使用 IF 語句的方法。
IF [conditional] THEN [do this]
單行 IF 是最簡單的示例。要執行程式碼塊,使用 END IF
IF [conditional] THEN
[do this]
[and do this]
...
[and also do this]
END IF
IF [conditional] THEN [do this] ELSE [do that]
要從兩個不同的程式碼塊中選擇,使用 ELSE 語句。
IF [conditional] THEN [do this] .. [and do this] ELSE [do that] .. [and also that] END IF
作為啟動全新的 IF THEN ELSE 語句序列的替代方案。你可以在 THEN 語句(s)之後使用 ELSEIF [conditional] THEN。這不會建立新的巢狀級別。
IF [條件] THEN
[do this] .. [and do this]
ELSEIF [條件] THEN
[do that] .. [and also that]
ELSEIF [條件] THEN
[do the other] .. [and also ...]
ELSE
[do this final thing]
END IF
FOR <variable name> = <start value> TO <end value> [STEP <increment>] [do this] ... [and do this] NEXT
<增量> 可以是 + 或 - 並且是可選的。如果省略,則預設值為 +1。FOR 迴圈中包含的程式碼將始終至少執行一次,因為只有在“NEXT”語句處才會檢查變數的值是否超過結束值。
當 NEXT 語句執行時,變數將根據 STEP 值修改並與結束值進行比較。如果變數尚未超過結束值,則控制將返回到 FOR 之後的行。
可以使用 EXIT FOR 命令提前退出 FOR 迴圈。
CLS
RANDOMIZE TIMER
num = INT(RND * 20) + 1
FOR count = 1 TO 5
INPUT "Pick a number between 1 and 20: ", answer
IF answer = num THEN PRINT "You win after";count;"guesses!": END
NEXT
PRINT "You lose"
WHILE <condition is true> [do this] .. [and this] WEND
如果條件為真,則執行 WHILE 之後的程式碼。當 WEND 命令執行時,它將控制返回到 WHILE 語句(條件在那裡再次被測試)。當條件計算為 FALSE 時,控制將傳遞到 WEND 之後的語句。
PRINT "Press any key to continue"
WHILE INKEY$=""
WEND
在上面的示例中,你看到一個按任意鍵提示,它將一直等待使用者按下鍵。(INKEY$ 功能將在 高階輸入 中介紹。)
DO [this] .. [and this] LOOP WHILE <condition is true> / LOOP UNTIL <condition is true>
DO...LOOP 結構是 WHILE 迴圈的更高階形式 - 與其他流程控制塊一樣,它以 DO 和 LOOP 為標記來表示邊界。
它依賴於放置在 DO 或 LOOP 之後的條件語句。
DO
a$ = inkey$
LOOP WHILE a$=""
作為替代方案,你可以用 UNTIL 替換 WHILE,使迴圈持續到滿足特定條件為止。
DO
x=x+1
LOOP UNTIL x >= 10
在某些版本的 BASIC 中,UNTIL 或 WHILE 條件可以放在 DO 語句之後,而不是 LOOP 語句之後(前測試),與上面顯示的(後測試)相反。
CLS
RANDOMIZE TIMER
num = INT(RND * 100) + 1
DO
INPUT "Pick a number between 1 and 100: ", answer
IF num = answer THEN PRINT "You Got It!"
IF num > answer THEN PRINT "Too Small"
IF num < answer THEN PRINT "Too big"
LOOP UNTIL num = answer
PRINT "Game Over."
SELECT CASE <variable expression>
CASE <value>
[do this]
CASE <value 2>
[do instead]
...
CASE ELSE
...
END SELECT
select 語句是重複使用 IF 語句的替代方案。<變量表達式> 被計算並依次與每個 CASE <值> 進行比較。當找到匹配的 CASE <值> 時,將執行其後的 [執行此操作] 程式碼。如果執行了 EXIT CASE,則控制將傳遞到 END SELECT 之後的行,否則將檢查下一個 CASE <值>。如果沒有找到匹配項,則執行 CASE ELSE。請注意,<值> 可以是數字、字元或字串,或者邏輯表示式(例如 '>0'、'<>1')。還要注意,可能會找到並執行多個 CASE 匹配(因此,例如,如果兩個 CASE <值> 是 'CASE >1' 和 'CASE >10',則計算為 11(或更多)的 <變量表達式> 將導致 CASE >1 和 CASE >10 都被執行)
CLS
PRINT "WELCOME"
PRINT "I HAVE AN ANSWER FOR ANY OF YOUR QUESTIONS"
10 INPUT "WRITE YOUR QUESTION AND I'LL GIVE YOU AN ANSWER ", question$
RANDOMIZE TIMER
PRINT
answer = INT(RND * 4 + 1)
SELECT CASE answer
CASE 1
PRINT "PLEASE REPHRASE YOUR QUESTION."
CASE 2
PRINT "YOUR QUESTION IS MEANINGLESS."
CASE 3
PRINT "DO YOU THINK I CAN ANSWER THIS?"
CASE 4
PRINT "THIS QUESTION LOOKS FUNNY."
END SELECT
PRINT
PRINT "ENTER ANOTHER QUESTION", K$
GOTO 10
如果一個引數會被多個 case 語句覆蓋,則第一個選項將優先。