Microsoft KB Archive/45563

= setbuf Doesn't Control MS-DOS Buffer or Keyboard Buffer =

Article ID: 45563

Article Last Modified on 12/12/2003

-

APPLIES TO

 The C Run-Time (CRT), when used with:  Microsoft C Professional Development System 5.1

 Microsoft C Professional Development System 6.0

 Microsoft C Professional Development System 6.0a

 Microsoft C Professional Development System 6.0a</li></ul>

 Microsoft C Professional Development System 5.1</li></ul>

 Microsoft C Professional Development System 6.0</li></ul>

 Microsoft C Professional Development System 6.0a</li></ul>

 Microsoft C/C++ Professional Development System 7.0</li></ul>

 Microsoft Visual C++ 1.0 Professional Edition</li></ul>

 Microsoft Visual C++ 1.5 Professional Edition</li></ul> </li></ul>

-

<div class="notice_section">

This article was previously published under Q45563

<div class="summary_section">

SUMMARY
The getchar function will wait for a carriage return even if setbuf is used to unbuffer stdin.

<div class="moreinformation_section">

MORE INFORMATION
The function setbuf affects a stream file buffer, such as stdin, but has no effect on the keyboard or MS-DOS device buffers. The stream I/O function getchar can read a character from the keyboard buffer only when the keyboard buffer is flushed by either being filled, by a carriage return, or by an interrupt 0x21, function 0xC call.

To read normal characters directly from the keyboard, you can use the console I/O function getch. To read control codes such as ALT+Q (echo subsequent output to printer) or ALT+R (pause output), you can use the _bios_keybrd function. For more information on this function, query on the following word in the Microsoft Knowledge Base: <pre class="fixed_text">  _bios_keybrd The following example demonstrates the difference between using getchar and getch.

Sample Code
/* Compile options needed: none


 * 1) include <stdio.h>
 * 2) include <conio.h>

void main (void)

{  setbuf (stdin, NULL);        /* cause stdin to be unbuffered */ if (getchar != EOF ) printf (&quot;getchar still waits for return key\n&quot;); if (getch != EOF ) printf (&quot;getch does not wait for return key\n&quot;); }

Additional query words: kbinf 1.00 1.50 5.10 6.00 6.00a 6.00ax 7.00

Keywords: kb16bitonly KB45563

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.