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