WHILE...WEND: Difference between revisions

From QB64 Phoenix Edition Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
The {{KW|WHILE...WEND}} statement is used to repeat a block of statements while the condition is met.
The [[WHILE...WEND]] statement is used to repeat a block of statements while the condition is met.




{{PageSyntax}}
{{PageSyntax}}
:{{KW|WHILE}} {{Parameter|condition}}
:[[WHILE]] {{Parameter|condition}}
:.
:.
:.
:.
:.
:.
:{{KW|WEND}}
:[[WEND]]




Line 18: Line 18:




{{RelationalTable}}
{{RelationalOperationsPlugin}}




Line 24: Line 24:
''Example 1:'' Reading an entire file. Example assumes the program has a [[OPEN|file opened]] as #1
''Example 1:'' Reading an entire file. Example assumes the program has a [[OPEN|file opened]] as #1


{{CodeStart}} '' ''
{{CodeStart}}
{{Cl|OPEN}} "Readme.txt" FOR {{Cl|INPUT (file mode)|INPUT}} AS #1
{{Cl|OPEN}} "Readme.txt" FOR {{Cl|INPUT (file mode)|INPUT}} AS #1
{{Cl|WHILE...WEND|WHILE}} {{Cl|NOT}} {{Cl|EOF}}(1)
{{Cl|WHILE...WEND|WHILE}} {{Cl|NOT}} {{Cl|EOF}}(1)
     {{Cl|_LIMIT}} 1                                    'limit line prints to one per second  
     {{Cl|_LIMIT}} 1                                    'limit line prints to one per second
     {{Cl|LINE INPUT (file statement)|LINE INPUT #}}1, text$
     {{Cl|LINE INPUT (file statement)|LINE INPUT #}}1, text$
     IF {{Cl|INKEY$}} = {{Cl|CHR$}}(27) THEN {{Cl|EXIT}} {{Cl|WHILE}}        'ESC key exits
     IF {{Cl|INKEY$}} = {{Cl|CHR$}}(27) THEN {{Cl|EXIT}} {{Cl|WHILE}}        'ESC key exits
     {{Cl|PRINT}} text$
     {{Cl|PRINT}} text$
{{Cl|WEND}} '' ''
{{Cl|WEND}}
{{CodeEnd}}
{{CodeEnd}}


''Example 2:'' Clearing the keyboard buffer.
''Example 2:'' Clearing the keyboard buffer.
{{CodeStart}} '' ''
{{CodeStart}}
{{Cl|WHILE}} {{Cl|INKEY$}} <> "" : {{Cl|WEND}} '' ''
{{Cl|WHILE}} {{Cl|INKEY$}} <> "" : {{Cl|WEND}}
{{CodeEnd}}
{{CodeEnd}}


Line 43: Line 43:
* [[DO...LOOP]]
* [[DO...LOOP]]
* [[FOR...NEXT]]
* [[FOR...NEXT]]
* [[UNTIL]] (condition)
* [[UNTIL]]
* [[_CONTINUE]]
* [[_CONTINUE]]




{{PageNavigation}}
{{PageNavigation}}

Latest revision as of 21:40, 2 February 2023

The WHILE...WEND statement is used to repeat a block of statements while the condition is met.


Syntax

WHILE condition
.
.
.
WEND


Description

  • condition is a numeric expression used to determine if the loop will execute.
  • statements will execute repeatedly while condition is a non-zero value.
  • EXIT WHILE can be used for emergency exits from the loop in QB64 only.
  • A DO...LOOP can use the same DO WHILE condition to get the same results.
  • WHILE loops only run if the WHILE condition is True.


         Table 3: The relational operations for condition checking.

 In this table, A and B are the Expressions to compare. Both must represent
 the same general type, i.e. they must result into either numerical values
 or STRING values. If a test succeeds, then true (-1) is returned, false (0)
     if it fails, which both can be used in further Boolean evaluations.
 ┌─────────────────────────────────────────────────────────────────────────┐
 │                          Relational Operations                          │
 ├────────────┬───────────────────────────────────────────┬────────────────┤
 │ OperationDescriptionExample usage  │
 ├────────────┼───────────────────────────────────────────┼────────────────┤
 │   A = B    │ Tests if A is equal to B.                 │ IF A = B THEN  │
 ├────────────┼───────────────────────────────────────────┼────────────────┤
 │   A <> B   │ Tests if A is not equal to B.             │ IF A <> B THEN │
 ├────────────┼───────────────────────────────────────────┼────────────────┤
 │   A < B    │ Tests if A is less than B.                │ IF A < B THEN  │
 ├────────────┼───────────────────────────────────────────┼────────────────┤
 │   A > B    │ Tests if A is greater than B.             │ IF A > B THEN  │
 ├────────────┼───────────────────────────────────────────┼────────────────┤
 │   A <= B   │ Tests if A is less than or equal to B.    │ IF A <= B THEN │
 ├────────────┼───────────────────────────────────────────┼────────────────┤
 │   A >= B   │ Tests if A is greater than or equal to B. │ IF A >= B THEN │
 └────────────┴───────────────────────────────────────────┴────────────────┘
   The operations should be very obvious for numerical values. For strings
   be aware that all checks are done case sensitive (i.e. "Foo" <> "foo").
   The equal/not equal check is pretty much straight forward, but for the
   less/greater checks the ASCII value of the first different character is
                          used for decision making:

   E.g. "abc" is less than "abd", because in the first difference (the 3rd
        character) the "c" has a lower ASCII value than the "d".

   This behavior may give you some subtle results, if you are not aware of
                   the ASCII values and the written case:

   E.g. "abc" is greater than "abD", because the small letters have higher
        ASCII values than the capital letters, hence "c" > "D". You may use
        LCASE$ or UCASE$ to make sure both strings have the same case.


Examples

Example 1: Reading an entire file. Example assumes the program has a file opened as #1

OPEN "Readme.txt" FOR INPUT AS #1
WHILE NOT EOF(1)
    _LIMIT 1                                    'limit line prints to one per second
    LINE INPUT #1, text$
    IF INKEY$ = CHR$(27) THEN EXIT WHILE        'ESC key exits
    PRINT text$
WEND

Example 2: Clearing the keyboard buffer.

WHILE INKEY$ <> "" : WEND


See also



Navigation:
Main Page with Articles and Tutorials
Keyword Reference - Alphabetical
Keyword Reference - By usage