readln() returns new line charater

Jeroen Bollen jbinero at gmail.com
Sun Dec 29 09:25:37 PST 2013


On Saturday, 28 December 2013 at 17:42:26 UTC, Jakob Ovrum wrote:
> On Saturday, 28 December 2013 at 17:23:30 UTC, Jeroen Bollen 
> wrote:
>> Usually if you're working with a console though the input 
>> stream won't exhaust and thus the blocking 'readln' would be a 
>> better option, no?
>
> The blocking behaviour of `stdin` by default is fine. The issue 
> is that `readln` returns an empty string when `stdin` is 
> empty/closed, which is different from an empty line (which is 
> just the line terminator). Approaches that erase the difference 
> with functions like `chomp` can't tell them apart.
>
> Assuming that `stdin` will never close seems like a bad idea 
> when it's so easy to handle, and the consequences of it closing 
> can be harsh (particularly an infinite loop). Even assuming 
> that `stdin` will never be redirected and always used from a 
> console, an experienced user might use ^Z to close standard 
> input to signal a clean end, only to be faced with either an 
> obscure error, segfault or infinite loop.

Wouldn't byline return an empty string if the inputstream is 
exhausted but not closed?


More information about the Digitalmars-d mailing list