Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
August 19, 2020 how stdin stream works? | ||||
---|---|---|---|---|
| ||||
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"); } |
August 19, 2020 Re: how stdin stream works? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Flade | 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
|
August 19, 2020 Re: how stdin stream works? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Steven Schveighoffer | On Wednesday, 19 August 2020 at 18:11:23 UTC, Steven Schveighoffer wrote:
> 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
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!
|
August 20, 2020 Re: how stdin stream works? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Flade | On 8/19/20 11:46 AM, Flade wrote:
>> Try instead getting a line via readln, and then trying to read that into your expected input.
>>
>> -Steve
>
> 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!
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
|
August 23, 2020 Re: how stdin stream works? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli | On Thursday, 20 August 2020 at 19:13:31 UTC, Ali Çehreli wrote:
> 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'. :)
>
> Ali
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!
|
August 23, 2020 Re: how stdin stream works? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli | On Thursday, 20 August 2020 at 19:13:31 UTC, Ali Çehreli wrote:
> On 8/19/20 11:46 AM, 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!
>
> 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
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!!!
|
Copyright © 1999-2021 by the D Language Foundation