Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Message-ID: <000901c293f6$184aac20$0219a8c0@eric2k> From: "Eric R. Krause" To: Cc: Subject: Flushing stdin (was: Re: gcc problem?) Date: Sun, 24 Nov 2002 15:14:28 -0500 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4920.2300 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 #include 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/