Ctrl-Z in windows and byLine()
Steven Schveighoffer
schveiguy at yahoo.com
Wed Oct 12 10:08:01 PDT 2011
On Wed, 12 Oct 2011 12:31:10 -0400, Andrei Alexandrescu
<SeeWebsiteForEmail at erdani.org> 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
More information about the Digitalmars-d
mailing list