On Saturday, 28 March 2015 at 03:07:31 UTC, jonaspm wrote:
module main;import std.stdio; import std.string; int main(string[] args) { int resp; char[] p, q; writefln("MENU DE OPCIONES"); writefln("1) Modus Ponens"); writefln("2) Modus Tollens"); writefln("3) Silogismo Hipotetico"); writefln("4) Salir"); do{ writeln("Introduce la opcion que deseas: "); readf(" %d", &resp); }while(resp<1 || resp>4); write("Write p:"); readln(p); // This is skipped. ¿? p = chomp(p); write("Write q:"); readln(q); q = chomp(q); writeln("p: ",p); // Doesn't write anything. writeln("q: ",q); // Writes what you typed in the keyboard back on readln(); return 0; }
The problem is that the `readf` call doesn't read the first line completely. It leaves the newline. The first `readln` call then picks up that newline and stops right there, resulting in an empty line.
I'm not sure how the `readf` could be changed to consume the newline. I tried " %d\n" and " %d ". They don't seem to do it.
But you can add a `readln();` after the `readf` call and it works.
