digitalmars.D.learn - how stdin stream works?
- Flade (14/14) Aug 19 2020 Hi everyone! I'm trying to do error handling (with the try block)
- Steven Schveighoffer (6/30) Aug 19 2020 Probably readf stops as soon as it encounters an error, meaning that
- Flade (4/35) Aug 19 2020 Thanks Steve! I will get the input a string then as you said and
- =?UTF-8?Q?Ali_=c3=87ehreli?= (25/32) Aug 20 2020 In some cases clearerr() and readln() may be what is needed:
Hi everyone! I'm trying to do error handling (with the try block) and when I give a wrong value to the variable (it is an integer and I give a non-number value), then It doesn't let me re get input. The code: int x; bool not_accepted = false; while (!not_accepted) { try { write("x: "); readf("%d\n", x); not_accepted = true; } catch (Exception msg) { writeln("Please give a right coordinate"); }
Aug 19 2020
On 8/19/20 1:44 PM, Flade wrote:Hi everyone! I'm trying to do error handling (with the try block) and when I give a wrong value to the variable (it is an integer and I give a non-number value), then It doesn't let me re get input. The code: int x; bool not_accepted = false; while (!not_accepted) { try { write("x: "); readf("%d\n", x); not_accepted = true; } catch (Exception msg) { writeln("Please give a right coordinate"); }Probably readf stops as soon as it encounters an error, meaning that your input is still present. Try instead getting a line via readln, and then trying to read that into your expected input. -Steve
Aug 19 2020
On Wednesday, 19 August 2020 at 18:11:23 UTC, Steven Schveighoffer wrote:On 8/19/20 1:44 PM, Flade wrote:Thanks Steve! I will get the input a string then as you said and then I'll try to convert it! Thanks a lot, have a nice day!Hi everyone! I'm trying to do error handling (with the try block) and when I give a wrong value to the variable (it is an integer and I give a non-number value), then It doesn't let me re get input. The code: int x; bool not_accepted = false; while (!not_accepted) { try { write("x: "); readf("%d\n", x); not_accepted = true; } catch (Exception msg) { writeln("Please give a right coordinate"); }Probably readf stops as soon as it encounters an error, meaning that your input is still present. Try instead getting a line via readln, and then trying to read that into your expected input. -Steve
Aug 19 2020
On 8/19/20 11:46 AM, Flade wrote:In some cases clearerr() and readln() may be what is needed: import std.stdio; void main() { int x; bool accepted = false; while (!accepted) { try { write("x: "); readf(" %d", x); accepted = true; } catch (Exception msg) { writeln("Please give a right coordinate"); stdin.clearerr(); stdin.readln(); } } writeln("x is ", x); } Note that I used " %d" because "%d/n" would not clean when nothing was input by just hitting the Enter key. A space character in the format string means "read and ignore any whitespace at this point" and I like it. :) Also note I changed the name of the variable as 'accepted'. :) AliTry instead getting a line via readln, and then trying to read that into your expected input. -SteveThanks Steve! I will get the input a string then as you said and then I'll try to convert it! Thanks a lot, have a nice day!
Aug 20 2020
On Thursday, 20 August 2020 at 19:13:31 UTC, Ali Çehreli wrote:On 8/19/20 11:46 AM, Flade wrote:Thanks a lot! Very useful info!!! And sorry for answering so late, I wasn't expecting someone to answer so I wasn't checking. Have a great day my friend![...]In some cases clearerr() and readln() may be what is needed: import std.stdio; void main() { int x; bool accepted = false; while (!accepted) { try { write("x: "); readf(" %d", x); accepted = true; } catch (Exception msg) { writeln("Please give a right coordinate"); stdin.clearerr(); stdin.readln(); } } writeln("x is ", x); } Note that I used " %d" because "%d/n" would not clean when nothing was input by just hitting the Enter key. A space character in the format string means "read and ignore any whitespace at this point" and I like it. :) Also note I changed the name of the variable as 'accepted'. :) Ali
Aug 23 2020
On Thursday, 20 August 2020 at 19:13:31 UTC, Ali Çehreli wrote:On 8/19/20 11:46 AM, Flade wrote:Wait! Oh man I just checked your name!!!! I'm currently reading your book and I wanted to say that you did an EXCELLENT work and I love it! Thanks a lot! You are great!!!In some cases clearerr() and readln() may be what is needed: import std.stdio; void main() { int x; bool accepted = false; while (!accepted) { try { write("x: "); readf(" %d", x); accepted = true; } catch (Exception msg) { writeln("Please give a right coordinate"); stdin.clearerr(); stdin.readln(); } } writeln("x is ", x); } Note that I used " %d" because "%d/n" would not clean when nothing was input by just hitting the Enter key. A space character in the format string means "read and ignore any whitespace at this point" and I like it. :) Also note I changed the name of the variable as 'accepted'. :) Ali[...]Thanks Steve! I will get the input a string then as you said and then I'll try to convert it! Thanks a lot, have a nice day!
Aug 23 2020