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

Reply via email to