digitalmars.D - writef
- Claus D. Volko (19/19) Jan 11 2009 Hi,
 - Jason House (2/35) Jan 11 2009 I'm going to guess the answer is flushing. I suspect writefln will flus...
 - Claus D. Volko (7/8) Jan 11 2009 Thanks for your answer. It sounds plausible to me. Do you know how to ma...
 - Adam D. Ruppe (6/7) Jan 11 2009 fflush(stdout);
 - Claus D. Volko (15/21) Jan 13 2009 I've tried it - it doesn't help. :(
 - Steven Schveighoffer (6/30) Jan 13 2009 Try reversing the two above lines:
 - Claus D. Volko (2/30) Jan 14 2009
 
Hi,
I'm currently writing a D tutorial for people new to programming, and I've
experienced some strange behavior:
The following program works as intended:
// The "Hello World!" program
import std.stdio;
import std.c.stdio;
void main ()
{
  int i;                                    // Variable definition
  i = 200;                                  // Assignment
  writefln ("Hello World!");                // Function call
  writefln ("The value of i is ", i, ".");  // Function call
  getch ();                                 // Function call
}
But if I replace
writefln ("The value of i is ", i, ".");
with
writef ("The value of i is ", i, ".");
the output of "The value of i is 200." happens only after the keypress.
Unfortunately, I haven't been able to find any documents about writef on the
Net which could have explained why it's like this, or whether it's a bug.
Therefore I'm posting my question to this newsgroup: Why?
 Jan 11 2009
Claus D.  Volko wrote:
 Hi,
 
 I'm currently writing a D tutorial for people new to programming, and I've
 experienced some strange behavior:
 
 The following program works as intended:
 
 // The "Hello World!" program
 
 import std.stdio;
 import std.c.stdio;
 
 void main ()
 {
   int i;                                    // Variable definition
   i = 200;                                  // Assignment
   writefln ("Hello World!");                // Function call
   writefln ("The value of i is ", i, ".");  // Function call
   getch ();                                 // Function call
 }
 
 But if I replace
 
 writefln ("The value of i is ", i, ".");
 
 with
 
 writef ("The value of i is ", i, ".");
 
 the output of "The value of i is 200." happens only after the keypress.
 Unfortunately, I haven't been able to find any documents about writef on
 the Net which could have explained why it's like this, or whether it's a
 bug. Therefore I'm posting my question to this newsgroup: Why?
I'm going to guess the answer is flushing.  I suspect writefln will flush the
output following the implied newline, but writef won't.  This is similar to
most console output libraries I use.  For example, C++ uses std::endl for a
flushed newline and "\n" for just a newline without flushing.
 Jan 11 2009
Thanks for your answer. It sounds plausible to me. Do you know how to manually
cause a flush? I've found this code snippet:
import std.cstream;
...
dout.writefln("Hello");
dout.flush();
Using doubt.writef and dout.flush, it works as intended. But can it also be
done without importing std.cstream? There doesn't seem to be a function flush
in std.stdio.
Jason House Wrote:
 I'm going to guess the answer is flushing.  I suspect writefln will flush the
output following the implied newline, but writef won't.  This is similar to
most console output libraries I use.  For example, C++ uses std::endl for a
flushed newline and "\n" for just a newline without flushing.
 Jan 11 2009
On Sun, Jan 11, 2009 at 10:15:45AM -0500, Claus D. Volko wrote:Thanks for your answer. It sounds plausible to me. Do you know how to manually cause a flush? I've found this code snippet:fflush(stdout); That should do it and is imported in std.stdio; -- Adam D. Ruppe http://arsdnet.net
 Jan 11 2009
Adam D. Ruppe Wrote:On Sun, Jan 11, 2009 at 10:15:45AM -0500, Claus D. Volko wrote:I've tried it - it doesn't help. :( // The "Hello World!" program import std.stdio; import std.c.stdio; void main () { int i; // Variable definition i = 200; // Assignment writefln ("Hello World!"); // Function call writef ("The value of i is ", i, "."); // Function call getch (); // Function call fflush (stdout); } I've also tried calling std.stdio.fflush (stdout); to avoid calling the function from std.c.stdio - not the desired effect either.Thanks for your answer. It sounds plausible to me. Do you know how to manually cause a flush? I've found this code snippet:fflush(stdout); That should do it and is imported in std.stdio;
 Jan 13 2009
"Claus D. Volko" wroteAdam D. Ruppe Wrote:Try reversing the two above lines: fflush(stdout); getch(); What you are doing is waiting for the input and then flushing stdout -- exactly the same as what you had originally.On Sun, Jan 11, 2009 at 10:15:45AM -0500, Claus D. Volko wrote:I've tried it - it doesn't help. :( // The "Hello World!" program import std.stdio; import std.c.stdio; void main () { int i; // Variable definition i = 200; // Assignment writefln ("Hello World!"); // Function call writef ("The value of i is ", i, "."); // Function call getch (); // Function call fflush (stdout);Thanks for your answer. It sounds plausible to me. Do you know how to manually cause a flush? I've found this code snippet:fflush(stdout); That should do it and is imported in std.stdio;} I've also tried calling std.stdio.fflush (stdout); to avoid calling the function from std.c.stdio - not the desired effect either.
 Jan 13 2009
Of course the line fflush (stdout); must be written before getch(); - then it works. Great! Claus D. Volko Wrote:Adam D. Ruppe Wrote:On Sun, Jan 11, 2009 at 10:15:45AM -0500, Claus D. Volko wrote:I've tried it - it doesn't help. :( // The "Hello World!" program import std.stdio; import std.c.stdio; void main () { int i; // Variable definition i = 200; // Assignment writefln ("Hello World!"); // Function call writef ("The value of i is ", i, "."); // Function call getch (); // Function call fflush (stdout); } I've also tried calling std.stdio.fflush (stdout); to avoid calling the function from std.c.stdio - not the desired effect either.Thanks for your answer. It sounds plausible to me. Do you know how to manually cause a flush? I've found this code snippet:fflush(stdout); That should do it and is imported in std.stdio;
 Jan 14 2009








 
 
 
 "Steven Schveighoffer" <schveiguy yahoo.com> 