readln() doesn't stop to read the input.
anonymous via Digitalmars-d
digitalmars-d at puremagic.com
Sat Mar 28 04:15:29 PDT 2015
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");
> 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:");
> 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
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.
More information about the Digitalmars-d