mirror of
https://github.com/QB64Official/qb64.git
synced 2024-08-22 07:55:07 +00:00
135 lines
5.8 KiB
Text
135 lines
5.8 KiB
Text
[[IF...THEN]] statements make boolean (true or false) evaluations to automate program decision making.
|
|
|
|
{{PageSyntax}}
|
|
===Single-line===
|
|
: [[IF]] {{Parameter|conditionStatement}} [[THEN]] ''{code}'' [[ELSE]] ''{alternativeCode}''
|
|
: [[IF]] {{Parameter|conditionStatement}} [[GOTO]] ''lineLabel''
|
|
|
|
|
|
===Block===
|
|
: [[IF]] {{Parameter|conditionStatement}} [[THEN]]
|
|
:: ''{code}''
|
|
:: ⋮
|
|
: [[ELSEIF]] {{Parameter|conditionStatement2}} [[THEN]]
|
|
:: ''{code}''
|
|
:: ⋮
|
|
: [[ELSE]]
|
|
:: ''{code}''
|
|
:: ⋮
|
|
: [[END IF]]
|
|
|
|
|
|
{{PageDescription}}
|
|
* The {{Parameter|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)|AND]] or alternative [[OR (boolean)|OR]] 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|DO]]'' 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 [[colon]]s 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.
|
|
|
|
|
|
|
|
{{Template:RelationalTable}}
|
|
|
|
|
|
<center> When evaluating a number value, no IF value > 0 operation is necessary for values not 0. Use: IF value THEN </center>
|
|
|
|
|
|
<center>'''Boolean Conditional Operators:'''</center>
|
|
|
|
|
|
:::::* [[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.
|
|
|
|
|
|
<center>'''Mathematical Logical operators:'''</center>
|
|
<center>* Truth table of the 6 BASIC Logical Operators:</center>
|
|
|
|
|
|
{{Template:LogicalTruthTable}}
|
|
|
|
<center>* '''Note that Basic returns -1 for True and 0 for False.'''</center>
|
|
|
|
|
|
{{PageExamples}}
|
|
''Example 1:'' In a one line IF statement, only [[REM]] can be used to comment out the action without an [[END IF]] error:
|
|
{{CodeStart}} '' ''
|
|
{{Cl|INPUT}} "Enter a number over or under 100: ", x
|
|
{{Cl|IF...THEN|IF}} x > 100 {{Cl|THEN}} {{Cl|PRINT}} x
|
|
{{Cl|IF...THEN|IF}} x > 100 {{Cl|THEN}} {{Cl|REM}} {{Cl|PRINT}} x '' '
|
|
{{CodeEnd}}
|
|
|
|
|
|
''Example 2:'' IF statement blocks require that the IF THEN and END IF statements be separate from the code executed.
|
|
{{CodeStart}} '' ''
|
|
{{Cl|INPUT}} "Enter a number over or under 100: ", x
|
|
{{Cl|IF...THEN|IF}} x > 100 {{Cl|THEN}}
|
|
y = 200
|
|
{{Cl|PRINT}} y
|
|
{{Cl|PRINT}} x
|
|
{{Cl|END IF}} '' ''
|
|
{{CodeEnd}}
|
|
|
|
|
|
''Example 3:'' True or False evaluation of a numerical value executes only when the value is not 0. '''Cannot evaluate [[STRING]] values.'''
|
|
{{CodeStart}} '' ''
|
|
{{Cl|INPUT}} "Enter a number or just hit Enter: ", x
|
|
{{Cl|IF...THEN|IF}} x {{Cl|THEN}} {{Cl|PRINT}} x '' ''
|
|
{{CodeEnd}}
|
|
:Example will only print if a numerical value is True (positive or negative). (Equivalent to: IF x > 0 OR x < 0 THEN evaluation)
|
|
|
|
|
|
''Example 4:'' Multiple evaluations using parenthesis to determine the order.
|
|
{{CodeStart}} '' ''
|
|
{{Cl|INPUT}} "Enter a number over or under 100 or 50: ", value
|
|
{{Cl|IF...THEN|IF}} (value% > 100 {{Cl|AND (boolean)|AND}} value% < 200) {{Cl|OR (boolean)|OR}} value% = 50 {{Cl|THEN}} {{Cl|PRINT}} "OK" '' ''
|
|
{{CodeEnd}}
|
|
|
|
|
|
''Example 5:'' Using multiple IF options in a one line statement.
|
|
{{CodeStart}} '' ''
|
|
{{Cl|INPUT}} "Enter a number over or under 200: ", x
|
|
{{Cl|IF...THEN|IF}} x > 200 {{Cl|THEN}} {{Cl|PRINT}} "High" {{Cl|{{Cl|ELSEIF}}}} x < 0 {{Cl|THEN}} {{Cl|PRINT}} "Low" {{Cl|{{Cl|ELSE}}}} {{Cl|PRINT}} "OK"
|
|
'' ''
|
|
{{CodeEnd}}
|
|
|
|
|
|
''Example 6:'' [[STRING]] values can be compared using greater than, less than, not equal to or equal to operators only.
|
|
{{CodeStart}} '' ''
|
|
PRINT "Press a letter key: ";
|
|
Key$ = {{Cl|INPUT$}}(1)
|
|
PRINT Key$
|
|
IF Key$ >= {{Cl|CHR$}}(65) AND Key$ <= {{Cl|CHR$}}(90) THEN PRINT "A to Z"
|
|
{{CodeEnd}}
|
|
: ''Explanation:'' Long [[STRING]] expression values are compared by their cumulative [[ASCII]] code values.
|
|
|
|
|
|
<center>'''QBasic decimal point value comparison errors'''</center>
|
|
* Floating decimal point numerical values may not be compared as exactly the same value. QB64 will compare them the same.
|
|
:''Example:'' QBasic would print ''unequal'' in the IF comparison code below even though it is exactly the same value printed.
|
|
{{CodeStart}} '' ''
|
|
x# = 5 / 10
|
|
y# = 6 / 10
|
|
z# = x# + y#
|
|
{{Cl|PRINT}} x#, y#, z#
|
|
{{Cl|IF...THEN|IF}} x# + y# = z# {{Cl|THEN}} {{Cl|PRINT}} "equal" {{Cl|ELSE}} {{Cl|PRINT}} "unequal" '' ''
|
|
{{CodeEnd}}
|
|
: Note: QB64 will make the calculation correctly and print ''equal''. Change older program code that relies on the error accordingly.
|
|
|
|
|
|
{{PageSeeAlso}}
|
|
* [[ELSEIF]], [[ELSE]]
|
|
* [[AND (boolean)]], [[OR (boolean)]]
|
|
* [[NOT]], [[GOTO]]
|
|
* [[SELECT CASE]]
|
|
* [[Boolean]] {{text|(numerical comparisons return a true or false value)}}
|
|
|
|
|
|
{{PageNavigation}}
|