Probably related: http://d.puremagic.com/issues/show_bug.cgi?id=3425
== Quote from Steven Schveighoffer ([email protected])'s article > On Wed, 12 Oct 2011 12:31:10 -0400, Andrei Alexandrescu > <[email protected]> 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? > My guess would be the pipes issue with DMC. I'd have to have more > information to be sure. > Specifically, when an attempt to read from a closed pipe occurs, Windows > flags this as an EPIPE error, but DMC incorrectly flags it as an EBADF > (bad file descriptor). > -Steve
