On 03/16/2011 05:49 AM, Kagamin wrote:
Ali ǥhreli Wrote:

The following program may be surprising to the novice:

import std.stdio;

void main()
{
      write("What is your name? ");
      string name = readln();
      writeln("Hi ", name, "!");
}

What if the user typed leading spaces? Will the program operate as you expect?

I would not like the leading spaces either, and that's another issue: contrary to readln(), readf() leaves the newline character in the input. I was about to start adopting the guideline of using " %s" (note the space) when reading formatted unless there is a reason not to. Most of the time the newline left from the previous input has nothing to do with the next read.

Otherwise the following program gets stuck:

import std.stdio;

void main()
{
    int i, j;
    readf("%s%s", &i, &j);
}

As a result, my current guideline is "put a space before every format specifier":

    readf(" %s %s", &i, &j);

This is a departure from C's scanf but is more consistent.

I don't want to accept and teach buggy behavior and that's why I asked on the D forum. Unfortunately I failed to attract interest there.

After accepting the above, I wanted to readf() lines too:

import std.stdio;

void main()
{
    string s;
    readf(" %s", &s);
    writeln(s);
}

As another departure from C, readf() does not stop at the first whitespace. It reads until the end of the input. Ok, I like that behavior but it's not useful for "What is your name? " like inputs.

So it led me to readln().

I don't have a problem with whitespace being left in the line, I just want to know whether that's the intended or accepted behavior.

Ali

Reply via email to