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.

Reply via email to