Ctrl-Z in windows and byLine()

Dmitry Olshansky dmitry.olsh at gmail.com
Wed Oct 12 09:41:53 PDT 2011


On 12.10.2011 20:31, Andrei Alexandrescu wrote:
> Got this from a reader:
>
> =======================
> I'm testing on Windows the code below, based on your errata changes for
> p8, print 1. It works ok if on console I enter some characters, but if I
> terminate console input with ctrl-z, then there is an error exit of the
> program. So, does this code need some exception handler to handle the
> immediate end of input from console?
>
> void dict1_4()
> {
> size_t[string] dict; // see errata use size_t
> foreach (line; stdin.byLine()){
> foreach (word; splitter(strip(line))){ // see errata required std.algorithm
> if (word in dict) continue;
> auto newID = dict.length;
> dict[word.idup] = newID; // see errata required idup
> writeln(newID, '\t', word);
> }
> }
>
> }
> =======================
>
> I thought Ctrl-Z simply sends EOF to the reader, so this should work.
> What is byLine() doing wrong?
>
>
> Thanks,
>
> Andrei

Works for me on Win7 x64.
Yet there is a known problem with pipes in DMC runtime,
but surely not console.
So assuming the program was named dict, this indeed fails:
echo hello | dict

-- 
Dmitry Olshansky


More information about the Digitalmars-d mailing list