reading formatted strings: readf("%s", &stringvar)

Ali Çehreli acehreli at yahoo.com
Mon Mar 26 14:19:59 PDT 2012


On 03/26/2012 02:12 PM, Tyro[17] wrote:

 > I don't want to provide an explicit terminator, but instead
 > rely on Ctrl-D/Ctrl-Z to do the job while being able to
 > continue processing read request. As explained by Andrei,
 > this is not possible. But in my mind if the stdin stream
 > can be opened once, it can be opened again. What is the
 > negative effect of testing if it is closed and reopening it
 > on entering readf? Especially since there is a unique
 > implementation of readf to deal with input from stdin.
 >
 > What is wrong with implementing reopen() in File for
 > specific use with stdin and then implementing readf
 > like this:
 >
 > uint readf(A...)(in char[] format, A args)
 > {
 > if(stdin.eof) stdin.reopen();
 > return stdin.readf(format, args);
 > }
 >
 > Andrew

That doesn't fit the way standard input and output streams work. These 
streams are bound to the application from the environment that has 
started them. The program itself does not have a way of manipulating how 
these streams are ended or connected.

Imagine that your program's stdin if piped from the output of another 
process:

   other | yours

Once 'other' finishes with its output, that's the end of the input of 
'yours'. 'yours' cannot communicate to the environment that it would 
like to continue reading more.

What you are asking for could be achieved only if both the environment 
and the program agreed that this would be the case.

Maybe I am missing something but that has been standard on many 
environments.

Ali



More information about the Digitalmars-d mailing list