This is the mail archive of the cygwin@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Flushing stdin (was: Re: gcc problem?)


Carlo,

Visual C++ 6.0 CRT (and AFAICT, that of Visual C++.NET too) allow you to
flush an input stream.  The only problem with that is that the C standard
apparently defines flushing ONLY for output streams (sec. 7.9.5.2).  Why in
the hell MicroSquash didn't disclose that this behavior was M$-specific, who
knows--it's yet another way they try to lock you into their software.

For reading words entered by the user, I'd approach the situation using
fgets() and a pair of string buffers--one to hold the input line and one to
hold the word that is sscanf()'ed.  After we've read the word, we can
loop-read until there are no more characters on stdin (in case we entered
past the size of the string buffer), knowing that our word is in a separate
buffer and that each iteration both are NULLed out.

Here's the code...

#include <string.h>
#include <stdio.h>
int main() {
    char string[80];
    char word[80];  /* extra string buffer */
    int i;

    for (i = 0; i < 2; i++) {
        memset(string, 0, 80 * sizeof(char));
        memset(word, 0, 80 * sizeof(char));
        printf("Enter some words: ");
        fgets(string, 80, stdin);   /* see note A */
        sscanf(string, "%s", word);
        printf("The first word you entered was... %s\n", word);
        while (!strchr(string, '\n'))
            fgets(string, 80, stdin);
    }
    return 0;
}

Note A:
Pressing Enter as soon as the prompt comes up will cause fgets() to write a
newline and a NULL to the buffer and return.  If you want to FORCE the user
to enter a non-blank line, then change
    fgets(string, 80, stdin);
to
    do {
        fgets(string, 80, stdin);
    } while (string[0] == '\n');

---
Eric R. Krause


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Bug reporting:         http://cygwin.com/bugs.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]