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

Reply via email to