digitalmars.D.learn - readf interferes with readln
- Bastiaan Veelo (21/21) Apr 27 2017 Hi,
- ketmar (3/24) Apr 27 2017 'cause your `readf()` stops before consuming `'\n`. i.e. EOL is still in...
- Bastiaan Veelo (2/33) Apr 27 2017 Right, of course. Thanks a lot.
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!
Apr 27 2017
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.
Apr 27 2017
On Thursday, 27 April 2017 at 08:37:26 UTC, ketmar wrote:Bastiaan Veelo wrote:Right, of course. Thanks a lot.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.
Apr 27 2017