Version française
Home     About     Download     Resources     Contact us    
Browse thread
print and output
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Adam P. Jenkins <ajenkins@c...>
Subject: print and output
Michel Levy writes:
 > Bonjour,
 > 
 > Quand j'ecris (en Ocaml) le "programme" suivant :
 >         print_string ">>"; read_int ();;
 > l'impression a lieu apres la lecture, ce qui me surprend, car il est dit
 > val read_int : unit -> int
 >         Flush standart output then ...
 > 
 > Quand j'ecris le "programme" suivant :
 >         output_string ">>"; read_int ();;
 > l'impression a lieu avant la lecture, ce qui est heureux.
 > 
 > Pourquoi cette diffence, car je pensais que :
 >         print_string = output_string stdout
 > 
 > Hi
 > 
 > When I write (in OCAML) the following program :
 >         print_string ">>"; read_int ();;
 > the reading takes place before the printing, what surprises me.
 > 
 > On the contrary, when I write :
 >         output_string ">>"; read_int ();;
 > the printing takes place before the reading, what is better.
 > 
 > Why this difference, whereas I thought that :
 >         print_string = output_string stdout
 > 
 > 
 > Michel Levy
 > D106 - Laboratoire LSR
 > B.P.72 - 38402 SAINT MARTIN D'HERES CEDEX - France
 > Tel : 0476827246
 > e.mail : Michel.Levy@imag.fr
 > 
 > 
 > 
 > 


That is kind of strange, since print_string is implemented with
output_string.  Maybe it just had to do with the order in which you
executed the commands, i.e. when the stdout buffer became full.

> cd /usr/local/lib/ocaml
> grep print_string pervasives.ml
let print_string s = output_string stdout s

To make the printing happen first in either case, you can add 
"flush stdout;".

	print_string ">>"; flush stdout; read_int ();;

Adam