Hi all, I have what is I suspect a silly question, but I am having a
total brainfart over this for some reason.  I want to read an
arbitrary amount of floats from user input and then perform some
statistics work on them. For some reason, I can't figure out how to
get it to recognise when the user has stopped entering values.  My
current code is:

void main(string[] args) {
        Stat[] stats;
        foreach (arg; args[1 .. $]) {
                auto newStat = cast(Stat) Object.factory("main." ~
arg);
                enforce(newStat, "Invalid statistics function: " ~
arg);
                stats ~= newStat;
        }
        for (double x; stdin.readf(" %s ", &x) == 1; ) {
                foreach (s; stats) {
                        s.accumulate(x);
                }
        }
        foreach (s; stats) {
                s.postprocess();
                writeln(s.result());
        }
}

At the moment it just crashes with a conversion error when invoked,
for example, with:

echo 3 1.6 17 | stats Min Average

I know my problem is the readf, but what would best practice be for
this situation?

Reply via email to