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
