On Wednesday, 27 June 2018 at 02:39:49 UTC, Shigeki Karita wrote:
import std.stdio;
import std.conv;

void main() {
    int i;
    try {
        readf("%d\n", &i); // "a"
    } catch (ConvException e) {
        auto s = readln();
        writeln(s); // "aa", "aaa" or SEGV ???
    }
}

https://wandbox.org/permlink/NMYNjpOgQtfUprBQ

I just want to retry reading if input was invalid. How can I do it?


I found that formattedRead!"%d\n"(readln(), i) can avoid the buffer overrun why readf cannot do this?

---

import std.stdio;
import std.format;

import std.stdio;
import std.format;

void main() {
    int i;
    try {
        formattedRead!"%d\n"(readln(), i);
    } catch (Exception e) {
        // writeln(e);
        auto s = readln();
        writeln(s); // ""
    }
}

Reply via email to