I didn't want to necropost, but I ran into the same behaviour as in this post:
https://forum.dlang.org/post/yfybveovbknvvxmio...@forum.dlang.org
and was just curious to understand it better.

If I call readln() after having previously called readf(), it does not behave as expected:
```d
import std.stdio, std.string;

void main()
{
    write("Please enter a number: ");
    double number;
    readf(" %s", number);

    write("Please enter a string: ");
    string input = strip(readln());

    writefln!("number: %s --- string: %s")(number, input);
}
```
Gives me the following:
```
Please enter a number: 1
Please enter a string: number: 1 ---- string:
```
I know I can get this to work replacing the `strin(readln())` with `readf(" %s\n", input)`, but I also found if I just call `strip(readln())` an extra time this worked as well, but what is confusing to me is if I have multiple readf's I still only need to call readln one extra time to get it to work as expected:
```d
import std.stdio, std.string;

void main()
{
    write("Please enter a number: ");
    double number1;
    readf(" %s", number1);
    write("Please enter a number: ");
    double number2;
    readf(" %s", number2);

    // Handle what should be two \n's from readf?
    string input = strip(readln());

    // Continue as normal
    write("Please enter a string: ");
    input = strip(readln());

    writefln!("number1: %s --- number2: %s --- string: %s")
        (number1, number2, input);
}
```
And this works.
```
Please enter a number: 1
Please enter a number: 2
Please enter a string: hello
number1: 1 --- number2: 2 --- string: hello
```
Could anyone help explain this to me, and also is there a better way to handle this when wanting to use a mix of readf and readln?

Reply via email to