Message-Id: <36126D1B.65F8B764@cableol.co.uk> Date: Wed, 30 Sep 1998 18:40:43 +0100 From: Peter Allen Reply-To: allen DOT asjp AT cableol DOT co DOT uk X-Mailer: Mozilla 4.04 [en] (Win95; I) Mime-Version: 1.0 To: Test User Cc: Test User , djgpp AT delorie DOT com Subject: Re: Strange DJGPP bug References: Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Test User wrote: > > On Sun, 27 Sep 1998, Peter Allen wrote: > > >Test User wrote: > > >> Here's a short C program: > > >> #include > >> > >> int main() > >> { > >> char buffer[256]; > >> > >> printf("Input: "); > >> fgets(buffer, 255, stdin); > >> printf("\nYou typed %s\n"); > >> } > > >> When compiled with the Linux version of GCC, this program > >> prints an Input: prompt. When the user types something and > >> presses ENTER, it then prints the string the user typed, > >> in the form of "\nYou typed %s\n", where \n is a newline and > >> %s is the string the user typed, including the trailing newline. > >> > >> When compiled with DJGPP, the program just sits there until > >> the user types something and presses ENTER. Then, the > >> program spews out the Input: prompt and the string the > >> user typed at the same time. For some reason, it executes > >> fgets() first, and then executes both printf's together. You > >> can't get it to print the prompt first, then call fgets(), > >> and then print the results. You can substitute fgets() for > >> your own elaborate loop system. You'll get the same result. > > >To save time switching between protected mode and dos, djgpp is > >buffered, so the easiest way to make it print something on the > >screen is to add \n to the end of printf ("input:") line. > > > Peter Allen > > That would look pretty strange. Imagine an FTP program that does > this. The prompt would be on one line, and the command on a different > line. How did they get BASH to work? It doesn't print "bash-2.01$ " > and then have the user type the commands on the next line. Both > the prompt and the user's input are on the same line. Woops, sorry. I forgot to say you could put fflush(stdout); at the end instead. Sorry Peter Allen