SELECT..CASE

From Liberty BASIC Family
Jump to navigation Jump to search
Supported in Just BASIC Supported in Liberty BASIC Not supported in Liberty BASIC 5 Supported in Run BASIC

Description

This is a decision-making structure. Based on the result of evaluating a variable or expression against a set of conditions, it controls which statement or statements the program will execute next.
Given some input for evaluation, it tests the input against each CASE value in order. If a CASE meets the condition, (if it evaluates to TRUE), the statements following that CASE are executed. If no conditions are met, and a CASE ELSE statement is present, the statements following the CASE ELSE will be executed. The structure ends with the END SELECT statement.
The expr can be omitted from the SELECT CASE statement and the CASE statements can be evaluated individually against a named variable or expression that has been defined elsewhere in the program. See the example for Multiple Case Conditions.
SELECT CASE statements can be nested.
See also IF..THEN.

Syntax

There are three general forms a SELECT CASE statement can take.

Basic Select Case

Evaluating a numeric or string variable or expression.
select case expr
case value X
statement(s) to execute
case value Y
statement(s) to execute
case value Z
statement(s) to execute
case else
statement(s) to execute
end select

Multiple Values for CASE

More than one CASE value can be evaluated when separated by commas.
select case expr
case values a, b, c
statement(s) to execute
case values d, e, f
statement(s) to execute
case values g, h, i
statement(s) to execute
case else
statement(s) to execute
end select

Multiple Case Conditions

More than one Condition can be evaluated in a SELECT CASE structure.
select case
case condition to evaluate
statement(s) to execute
case condition to evaluate
statement(s) to execute
case condition to evaluate
statement(s) to execute
case else
statement(s) to execute
end select

Hints

Any number of conditions can be evaluated. The testing ends with the first CASE that satisfies the test condition, even if subsequent CASE statements are also true.
Code to be executed in a CASE block can also include goto [branchLabel], gosub [branchLabel], or a call to a sub or function. When the program returns from a subroutine initiated by a call or a gosub, the statement following the END SELECT is the next statement to be executed, since the structure has finished evaluating its conditions.
In JB, condition to evaluate will result in a boolean value. With the IF statement, any non-zero integer is True, but CASE accepts only 1 as True. All other values work as False. That means using NOT( ) function in condition will not work (very likely bug in SELECT CASE).

Example

Basic Select Case

num = 3
    select case num
        case 1
            print "one"
        case 2
            print "two"
        case 3
            print "three"
        case else
            print "other number"
        end select

' In this basic Case use, the variable, num, is tested against the value
' supplied with each CASE. The condition being tested is: "What CASE
' value is the same as num?" The CASE statement that has a value of "3"
' meets the test; it is TRUE. The statement following is executed and
' "three" is printed.

' A short example with a string variable
gender$ = "Male"
    select case gender$
        case "Male"
            print "You are a Paladin"
        case "Female"
            print "You are a Sorceress"
        case else
            print "You are a Dwarf"
    end select

    ' prints "You are a Paladin"

Multiple Values for Case

' Evaluating multiple string cases. In this example, the variable,
' mo$, is compared to any of the three string values following a
' CASE statement.

    input "Enter the current month "; mo$

    ' Use first 3 letters of user's input and convert to caps.
    mo$ = upper$(left$(mo$, 3))

    select case mo$
        case "DEC", "JAN", "FEB"
            season$ = "Winter"
        case "MAR", "APR", "MAY"
            season$ = "Spring"
        case "JUN", "JUL", "AUG"
            season$ = "Summer"
        case "SEP", "OCT", "NOV"
            season$ = "Fall"
        case else
            print "Invalid month entered."
            end
    end select

    print "It is the "; season$; " season."
    end

Multiple Case Conditions

' Evaluating multiple conditions. When an expression is not
' included in the SELECT CASE statement, the individual CASE
' conditions can be evaluated against a named variable or expression.

' In this example, "num" is the named numeric variable that will be
' evaluated by expressions in each of the CASE statements. The
' objective is to find which CASE has the condition that evaluates to
' a value equal to the value of "num".

    input "Word to categorize: "; wd$
    ' Convert to lower case
    wd$ = lower$(wd$)
    ' Get ASCII value of 1st letter of wd$
    num = asc(wd$)

    select case
        case (num > 96) and (num < 104)
            print "Category a - g"
        case (num > 103) and (num < 111)
            print "Category h - n"
        case (num > 110) and (num < 119)
            print "Category o - v"
        case (num > 118) and (num < 123)
            print "Category w - z"
        case else
            print "Invalid entry"
            end
    end select

    end
    ' Prints the Category range in which the input word would fit.

Useful Procedures

' Place a useful function or sub using this keyword here