Prompting using stdio

via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Sep 28 08:36:15 PDT 2014


On Sunday, 28 September 2014 at 14:48:03 UTC, H. S. Teoh via 
Digitalmars-d-learn wrote:
> On Sun, Sep 28, 2014 at 02:16:29PM +0000, "Nordlöw" via 
> Digitalmars-d-learn wrote:
>> I thought
>> 
>> int main(string[] args)
>> {
>>     import std.stdio;
>>     write(`Press enter to continue: `);
>>     stdout.flush;
>>     auto line = readln();
>>     writeln("Read ", line);
>>     return 0;
>> }
>> 
>> would function as a good prompting but it doesn't.
>> 
>> I outputs the string given to write *after* I've pressed 
>> return. Why?
>
> It's an OS limitation. If you're on Posix, you need to switch 
> your
> terminal to cbreak mode, otherwise the program doesn't actually 
> receive
> any data until after you press Return. I'm not sure what the 
> Windows
> equivalent is, but a similar thing happens there -- the input 
> line is
> buffered by the OS and the program doesn't see it until Return 
> is
> pressed.

That's not his problem though - he doesn't see "Press enter to 
continue" in the terminal before he enters text.

However, I can't reproduce it with DMD master on Linux, it works 
for me as intended.


More information about the Digitalmars-d-learn mailing list