Thread overview | |||||
---|---|---|---|---|---|
|
April 27, 2017 readf interferes with readln | ||||
---|---|---|---|---|
| ||||
Hi, I am having trouble explaining the following to someone learning D. Can someone explain why readln has different behaviour when it is preceded by readf? Suppose we want to not end the program before the user presses Enter by having readln at the end of main(): ``` import std.stdio; void main() { int num; write("Give a number "); readf(" %s", num); writeln("Thanks"); readln; readln; } ``` In this example this requires twice readln. When you comment out readf, you need readln only once. Thanks! |
April 27, 2017 Re: readf interferes with readln | ||||
---|---|---|---|---|
| ||||
Posted in reply to Bastiaan Veelo | Bastiaan Veelo wrote:
> Hi,
>
> I am having trouble explaining the following to someone learning D. Can someone explain why readln has different behaviour when it is preceded by readf?
>
> Suppose we want to not end the program before the user presses Enter by having readln at the end of main():
>
> ```
> import std.stdio;
>
> void main()
> {
> int num;
> write("Give a number ");
> readf(" %s", num);
> writeln("Thanks");
> readln;
> readln;
> }
> ```
>
> In this example this requires twice readln. When you comment out readf, you need readln only once.
>
> Thanks!
'cause your `readf()` stops before consuming `'\n`. i.e. EOL is still in input buffer, and first `readln()` will immediately consume it.
|
April 27, 2017 Re: readf interferes with readln | ||||
---|---|---|---|---|
| ||||
Posted in reply to ketmar | On Thursday, 27 April 2017 at 08:37:26 UTC, ketmar wrote:
> Bastiaan Veelo wrote:
>
>> Hi,
>>
>> I am having trouble explaining the following to someone learning D. Can someone explain why readln has different behaviour when it is preceded by readf?
>>
>> Suppose we want to not end the program before the user presses Enter by having readln at the end of main():
>>
>> ```
>> import std.stdio;
>>
>> void main()
>> {
>> int num;
>> write("Give a number ");
>> readf(" %s", num);
>> writeln("Thanks");
>> readln;
>> readln;
>> }
>> ```
>>
>> In this example this requires twice readln. When you comment out readf, you need readln only once.
>>
>> Thanks!
>
> 'cause your `readf()` stops before consuming `'\n`. i.e. EOL is still in input buffer, and first `readln()` will immediately consume it.
Right, of course. Thanks a lot.
|
Copyright © 1999-2021 by the D Language Foundation