Must Use A$=INKEY$ after SLEEP to Clear Keyboard Buffer (36397)



The information in this article applies to:

  • Microsoft QuickBASIC 4.0
  • Microsoft QuickBASIC 4.0b
  • Microsoft BASIC Compiler for MS-DOS and OS/2 6.0
  • Microsoft BASIC Compiler for MS-DOS and OS/2 6.0b
  • Microsoft Basic Professional Development System (PDS) for MS-DOS and MS OS/2 7.0

This article was previously published under Q36397

SUMMARY

The SLEEP statement was introduced in QuickBasic Version 4.00b and in Microsoft Basic Compiler Version 6.00 for MS-DOS and MS OS/2. SLEEP does not clear the buffer when a key is pressed. Therefore, the next input statement will read the pressed keys to clear prior SLEEP commands.

This information applies to Microsoft QuickBasic Versions 4.00b and 4.50 for MS-DOS, to Microsoft Basic Compiler Versions 6.00 and 6.00b for MS-DOS and MS OS/2, and to Microsoft Basic PDS Version 7.00 for MS-DOS and MS OS/2.

MORE INFORMATION

The following code example demonstrates the problem with a workaround:
CLS
FOR i = 1 TO 5
  PRINT "press a key please"
  SLEEP
' If you want to clear the buffer, insert the following statement:
'   x$ = INKEY$
NEXT
CLS
'  If you do not clear the buffer, this INPUT prompts with a print
'  of the 5 characters pressed in the FOR loop above, and the value of
'  a$ will be those 5 characters plus any entered at the prompt.
INPUT a$
PRINT a$

Modification Type:MinorLast Reviewed:8/16/2005
Keywords:KB36397 kbAudDeveloper