Thread overview
Why does calling readln() more than once not work
Jan 28, 2021
Ruby The Roobster
Jan 28, 2021
Ruby The Roobster
Jan 28, 2021
Adam D. Ruppe
Jan 28, 2021
Ruby The Roobster
January 28, 2021
I call readln() on a variable in a loop. On the next iteration, it's as if the readln() is ignored, as it moves on to the next line apparently. Here is the code:

for(int i = 1;i<1000;i++)
    {
        int tempx;
        int tempy;
        int high = 0;
        double highs = 0;
        writeln("Type in  data for an egg:");
        write("Chicken: ");
        readln(tempz);
        write("Width: ");
        readf(" %d",&tempx);
        write("Hight: ");
        readf(" %d",&tempy);
        data[i] = new egg(tempx,tempy,cast(string)tempz);
//...
Anything that will fix this?
January 28, 2021
On Thursday, 28 January 2021 at 19:25:52 UTC, Ruby The Roobster wrote:
> I call readln() on a variable in a loop. On the next iteration, it's as if the readln() is ignored, as it moves on to the next line apparently. Here is the code:
>
> for(int i = 1;i<1000;i++)
>     {
>         int tempx;
>         int tempy;
>         int high = 0;
>         double highs = 0;
>         writeln("Type in  data for an egg:");
>         write("Chicken: ");
>         readln(tempz);
>         write("Width: ");
>         readf(" %d",&tempx);
>         write("Hight: ");
>         readf(" %d",&tempy);
>         data[i] = new egg(tempx,tempy,cast(string)tempz);
> //...
> Anything that will fix this?

Here is the declaration for tempz(outside the loop): char[] tempz;
January 28, 2021
On Thursday, 28 January 2021 at 19:25:52 UTC, Ruby The Roobster wrote:
>         readf(" %d",&tempy);

This leaves the \n at the end. A next readf thanks to the leading space would ignore that \n and keep going, but a readln stops at the first \n it sees, even if it is a leftover item in the buffer from a readf before.
January 28, 2021
On Thursday, 28 January 2021 at 19:31:35 UTC, Adam D. Ruppe wrote:
> On Thursday, 28 January 2021 at 19:25:52 UTC, Ruby The Roobster wrote:
>>         readf(" %d",&tempy);
>
> This leaves the \n at the end. A next readf thanks to the leading space would ignore that \n and keep going, but a readln stops at the first \n it sees, even if it is a leftover item in the buffer from a readf before.

I replaced readln with the following: readf(" %s\n",&tempz);
That seemed to do the trick(and note here, when you press enter, it stops taking input).