IF...THEN - QB64Official/qb64 GitHub Wiki
IF...THEN statements make boolean (true or false) evaluations to automate program decision making.
Syntax
Single-line
Block
IF conditionStatement THEN {code} ⋮ ELSEIF conditionStatement2 THEN {code} ⋮ ELSE {code} ⋮ END IF
Description
- The conditionStatement evaluation by IF must be true (-1) or a non-zero numerical value for the THEN {code} to be executed.
- Multiple conditional evaluations can be made using inclusive AND (boolean) or alternative OR (boolean) conditional expressions.
- THEN is not required when GOTO is used to send program flow to a line number or label.
- IF statements can also have alternative evaluations using ELSEIF and ELSE conditions.
- When the IF statement and/or code to be run is more than code line, an END IF statement must be used.
- With multiple code lines to run, end the IF statement with THEN and place all of the code on lines below that line.
- Multiple code line block statements require that the IF...THEN, ELSEIF, ELSE and END IF be on separate lines.
- The IDE may return an error of NEXT without FOR or LOOP without DO...LOOP when END IF does not end a statement block.
- The QB64 IDE will indicate an error in the IF statement line until END IF closes the statement block.
- Use colons to execute multiple statements in a single-line IF statement.
- An underscore can be used anywhere after the code on a single-line to continue it to the next line in QB64.
- NOTE: STRING values can only be evaluated in an IF statement if a value is compared to a literal or CHR$ string value. QB64 may not compile literal IF string statements or indicate an IDE coding error. Use LEN or ASC to compare strings numerically.
Relational Operators:
Symbol | Condition | Example Usage |
---|---|---|
= | Equal | IF a = b THEN |
<> | NOT equal | IF a <> b THEN |
< | Less than | IF a < b THEN |
> | Greater than | IF a > b THEN |
<= | Less than or equal | IF a <= b THEN |
>= | Greater than or equal | IF a >= b THEN |
When evaluating a number value, no IF value > 0 operation is necessary for values not 0. Use: IF value THEN
Boolean Conditional Operators:
- AND (boolean) can be used to add extra conditions to a boolean statement evaluation.
- OR (boolean) can be used to add alternate conditions to a boolean statement evaluation.
- Parenthesis are allowed inside of boolean statements to clarify an evaluation.
Mathematical Logical operators:
- Truth table of the 6 BASIC Logical Operators:
The results of the bitwise logical operations, where A and B are operands, and T and F indicate that a bit is set or not set:
A | B | NOT B | A AND B | A OR B | A XOR B | A EQV B | A IMP B | |
---|---|---|---|---|---|---|---|---|
T | T | F | T | T | F | T | T | |
T | F | T | F | T | T | F | F | |
F | T | F | F | T | T | F | T | |
F | F | T | F | F | F | T | T |
Relational Operations return negative one (-1, all bits set) and zero (0, no bits set) for true and false, respectively. This allows relational tests to be inverted and combined using the bitwise logical operations.
- Note that Basic returns -1 for True and 0 for False.
Example(s)
In a one line IF statement, only REM can be used to comment out the action without an END IF error:
INPUT "Enter a number over or under 100: ", x
IF x > 100 THEN PRINT x
IF x > 100 THEN REM PRINT x * '
IF statement blocks require that the IF THEN and END IF statements be separate from the code executed.
INPUT "Enter a number over or under 100: ", x
IF x > 100 THEN
y = 200
PRINT y
PRINT x
END IF
True or False evaluation of a numerical value executes only when the value is not 0. Cannot evaluate STRING values.
INPUT "Enter a number or just hit Enter: ", x
IF x THEN PRINT x
Example will only print if a numerical value is True (positive or negative). (Equivalent to: IF x > 0 OR x < 0 THEN evaluation)
Multiple evaluations using parenthesis to determine the order.
INPUT "Enter a number over or under 100 or 50: ", value
IF (value% > 100 AND value% < 200) OR value% = 50 THEN PRINT "OK"
Using multiple IF options in a one line statement.
INPUT "Enter a number over or under 200: ", x
IF x > 200 THEN PRINT "High" ELSEIF x < 0 THEN PRINT "Low" ELSE PRINT "OK"
STRING values can be compared using greater than, less than, not equal to or equal to operators only.
PRINT "Press a letter key: ";
Key$ = INPUT$(1)
PRINT Key$
IF Key$ >= CHR$(65) AND Key$ <= CHR$(90) THEN PRINT "A to Z"
Explanation: Long STRING expression values are compared by their cumulative ASCII code values.
QBasic decimal point value comparison errors
- Floating decimal point numerical values may not be compared as exactly the same value. QB64 will compare them the same.
QBasic would print unequal in the IF comparison code below even though it is exactly the same value printed.
x# = 5 / 10
y# = 6 / 10
z# = x# + y#
PRINT x#, y#, z#
IF x# + y# = z# THEN PRINT "equal" ELSE PRINT "unequal"
Note: QB64 will make the calculation correctly and print equal. Change older program code that relies on the error accordingly.
See Also
- ELSEIF, ELSE
- AND (boolean), OR (boolean)
- NOT, GOTO
- SELECT CASE
- Boolean (numerical comparisons return a true or false value)