How to re-ask for input in try catch statement
string l = Console.ReadLine();
try
{
int.Parse(l);
}
catch (FormatException)
{
Console.WriteLine("Invalid input. Please enter 1, 2, or 3.");
}
As you can see, I have asked for input, but if the user enters a non-integral answer such as the letter "f", the catch statement catches it, but then throws the exception again afterwards, because the variable "l" still equals "f". Help?
c#
add a comment |
string l = Console.ReadLine();
try
{
int.Parse(l);
}
catch (FormatException)
{
Console.WriteLine("Invalid input. Please enter 1, 2, or 3.");
}
As you can see, I have asked for input, but if the user enters a non-integral answer such as the letter "f", the catch statement catches it, but then throws the exception again afterwards, because the variable "l" still equals "f". Help?
c#
5
Seems you should learn what a loop is before you start using try catch.
– ChaosPandion
May 15 '13 at 20:42
add a comment |
string l = Console.ReadLine();
try
{
int.Parse(l);
}
catch (FormatException)
{
Console.WriteLine("Invalid input. Please enter 1, 2, or 3.");
}
As you can see, I have asked for input, but if the user enters a non-integral answer such as the letter "f", the catch statement catches it, but then throws the exception again afterwards, because the variable "l" still equals "f". Help?
c#
string l = Console.ReadLine();
try
{
int.Parse(l);
}
catch (FormatException)
{
Console.WriteLine("Invalid input. Please enter 1, 2, or 3.");
}
As you can see, I have asked for input, but if the user enters a non-integral answer such as the letter "f", the catch statement catches it, but then throws the exception again afterwards, because the variable "l" still equals "f". Help?
c#
c#
edited May 15 '13 at 20:42
Sean Bright
93.6k14114128
93.6k14114128
asked May 15 '13 at 20:39
omniomni
4421516
4421516
5
Seems you should learn what a loop is before you start using try catch.
– ChaosPandion
May 15 '13 at 20:42
add a comment |
5
Seems you should learn what a loop is before you start using try catch.
– ChaosPandion
May 15 '13 at 20:42
5
5
Seems you should learn what a loop is before you start using try catch.
– ChaosPandion
May 15 '13 at 20:42
Seems you should learn what a loop is before you start using try catch.
– ChaosPandion
May 15 '13 at 20:42
add a comment |
4 Answers
4
active
oldest
votes
You can use int.TryParse
instead of catching exceptions. It returns whether the parse was successful, so you can check it in a loop until the input is valid e.g.
int i;
bool valid = false;
do {
Console.WriteLine("Enter an int: ");
string input = Console.ReadLine();
valid = int.TryParse(input, out i);
} while(! valid);
//use i
There's no need to declare an additionalbool
field for this if you embed theTryCatch
in the condition of the loop.
– qJake
May 15 '13 at 20:46
add a comment |
You'll want to use TryParse with a while loop (since your condition can fail an infinite number of times).
string l = Console.ReadLine();
int line = 0;
while(!int.TryParse(l, out line))
{
Console.WriteLine("Try again.");
l = Console.ReadLine();
}
// line contains a valid number here.
add a comment |
don't do it that way. Use TryParse instead
string l = Console.ReadLine();
int i;
while(int.TryParse(l, out i) == false)
{
Console.WriteLine("Invalid input. Please enter 1, 2, or 3.");
l = Console.ReadLine();
}
== false
? Why not!
?
– qJake
May 15 '13 at 20:43
@SpikeX - Its so you know it is a boolean!!!!
– ChaosPandion
May 15 '13 at 20:44
@SpikeX I personally think that!int.TryParse(l, out i)
looks too similar toint.TryParse(l, out i)
It improves readability for me
– Sam I am
May 15 '13 at 20:44
@ChaosPandion Your IDE should be responsible for relaying type information, not your code.
– qJake
May 15 '13 at 20:44
@SpikeX - I was being snarky.
– ChaosPandion
May 15 '13 at 20:46
|
show 1 more comment
There are various ways you can handle this. One way it to wrap all of this in a loop allowing a given number of retries or just a while loop that keeps going until the user enters valid input. Another is to put it all in a method and call it recursively from the catch block. I think the best solution is neither, instead I would use Int.TryParse
and I would have that inside a while loop like;
while (!Int32.TryParse(input, out line))
{
Console.WriteLine("Invalid input. Please enter 1, 2, or 3.");
input = Console.ReadLine();
}
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f16574556%2fhow-to-re-ask-for-input-in-try-catch-statement%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
4 Answers
4
active
oldest
votes
4 Answers
4
active
oldest
votes
active
oldest
votes
active
oldest
votes
You can use int.TryParse
instead of catching exceptions. It returns whether the parse was successful, so you can check it in a loop until the input is valid e.g.
int i;
bool valid = false;
do {
Console.WriteLine("Enter an int: ");
string input = Console.ReadLine();
valid = int.TryParse(input, out i);
} while(! valid);
//use i
There's no need to declare an additionalbool
field for this if you embed theTryCatch
in the condition of the loop.
– qJake
May 15 '13 at 20:46
add a comment |
You can use int.TryParse
instead of catching exceptions. It returns whether the parse was successful, so you can check it in a loop until the input is valid e.g.
int i;
bool valid = false;
do {
Console.WriteLine("Enter an int: ");
string input = Console.ReadLine();
valid = int.TryParse(input, out i);
} while(! valid);
//use i
There's no need to declare an additionalbool
field for this if you embed theTryCatch
in the condition of the loop.
– qJake
May 15 '13 at 20:46
add a comment |
You can use int.TryParse
instead of catching exceptions. It returns whether the parse was successful, so you can check it in a loop until the input is valid e.g.
int i;
bool valid = false;
do {
Console.WriteLine("Enter an int: ");
string input = Console.ReadLine();
valid = int.TryParse(input, out i);
} while(! valid);
//use i
You can use int.TryParse
instead of catching exceptions. It returns whether the parse was successful, so you can check it in a loop until the input is valid e.g.
int i;
bool valid = false;
do {
Console.WriteLine("Enter an int: ");
string input = Console.ReadLine();
valid = int.TryParse(input, out i);
} while(! valid);
//use i
answered May 15 '13 at 20:42
LeeLee
120k14177248
120k14177248
There's no need to declare an additionalbool
field for this if you embed theTryCatch
in the condition of the loop.
– qJake
May 15 '13 at 20:46
add a comment |
There's no need to declare an additionalbool
field for this if you embed theTryCatch
in the condition of the loop.
– qJake
May 15 '13 at 20:46
There's no need to declare an additional
bool
field for this if you embed the TryCatch
in the condition of the loop.– qJake
May 15 '13 at 20:46
There's no need to declare an additional
bool
field for this if you embed the TryCatch
in the condition of the loop.– qJake
May 15 '13 at 20:46
add a comment |
You'll want to use TryParse with a while loop (since your condition can fail an infinite number of times).
string l = Console.ReadLine();
int line = 0;
while(!int.TryParse(l, out line))
{
Console.WriteLine("Try again.");
l = Console.ReadLine();
}
// line contains a valid number here.
add a comment |
You'll want to use TryParse with a while loop (since your condition can fail an infinite number of times).
string l = Console.ReadLine();
int line = 0;
while(!int.TryParse(l, out line))
{
Console.WriteLine("Try again.");
l = Console.ReadLine();
}
// line contains a valid number here.
add a comment |
You'll want to use TryParse with a while loop (since your condition can fail an infinite number of times).
string l = Console.ReadLine();
int line = 0;
while(!int.TryParse(l, out line))
{
Console.WriteLine("Try again.");
l = Console.ReadLine();
}
// line contains a valid number here.
You'll want to use TryParse with a while loop (since your condition can fail an infinite number of times).
string l = Console.ReadLine();
int line = 0;
while(!int.TryParse(l, out line))
{
Console.WriteLine("Try again.");
l = Console.ReadLine();
}
// line contains a valid number here.
edited May 15 '13 at 20:48
answered May 15 '13 at 20:43
qJakeqJake
12.1k1064114
12.1k1064114
add a comment |
add a comment |
don't do it that way. Use TryParse instead
string l = Console.ReadLine();
int i;
while(int.TryParse(l, out i) == false)
{
Console.WriteLine("Invalid input. Please enter 1, 2, or 3.");
l = Console.ReadLine();
}
== false
? Why not!
?
– qJake
May 15 '13 at 20:43
@SpikeX - Its so you know it is a boolean!!!!
– ChaosPandion
May 15 '13 at 20:44
@SpikeX I personally think that!int.TryParse(l, out i)
looks too similar toint.TryParse(l, out i)
It improves readability for me
– Sam I am
May 15 '13 at 20:44
@ChaosPandion Your IDE should be responsible for relaying type information, not your code.
– qJake
May 15 '13 at 20:44
@SpikeX - I was being snarky.
– ChaosPandion
May 15 '13 at 20:46
|
show 1 more comment
don't do it that way. Use TryParse instead
string l = Console.ReadLine();
int i;
while(int.TryParse(l, out i) == false)
{
Console.WriteLine("Invalid input. Please enter 1, 2, or 3.");
l = Console.ReadLine();
}
== false
? Why not!
?
– qJake
May 15 '13 at 20:43
@SpikeX - Its so you know it is a boolean!!!!
– ChaosPandion
May 15 '13 at 20:44
@SpikeX I personally think that!int.TryParse(l, out i)
looks too similar toint.TryParse(l, out i)
It improves readability for me
– Sam I am
May 15 '13 at 20:44
@ChaosPandion Your IDE should be responsible for relaying type information, not your code.
– qJake
May 15 '13 at 20:44
@SpikeX - I was being snarky.
– ChaosPandion
May 15 '13 at 20:46
|
show 1 more comment
don't do it that way. Use TryParse instead
string l = Console.ReadLine();
int i;
while(int.TryParse(l, out i) == false)
{
Console.WriteLine("Invalid input. Please enter 1, 2, or 3.");
l = Console.ReadLine();
}
don't do it that way. Use TryParse instead
string l = Console.ReadLine();
int i;
while(int.TryParse(l, out i) == false)
{
Console.WriteLine("Invalid input. Please enter 1, 2, or 3.");
l = Console.ReadLine();
}
answered May 15 '13 at 20:41
Sam I amSam I am
27k115995
27k115995
== false
? Why not!
?
– qJake
May 15 '13 at 20:43
@SpikeX - Its so you know it is a boolean!!!!
– ChaosPandion
May 15 '13 at 20:44
@SpikeX I personally think that!int.TryParse(l, out i)
looks too similar toint.TryParse(l, out i)
It improves readability for me
– Sam I am
May 15 '13 at 20:44
@ChaosPandion Your IDE should be responsible for relaying type information, not your code.
– qJake
May 15 '13 at 20:44
@SpikeX - I was being snarky.
– ChaosPandion
May 15 '13 at 20:46
|
show 1 more comment
== false
? Why not!
?
– qJake
May 15 '13 at 20:43
@SpikeX - Its so you know it is a boolean!!!!
– ChaosPandion
May 15 '13 at 20:44
@SpikeX I personally think that!int.TryParse(l, out i)
looks too similar toint.TryParse(l, out i)
It improves readability for me
– Sam I am
May 15 '13 at 20:44
@ChaosPandion Your IDE should be responsible for relaying type information, not your code.
– qJake
May 15 '13 at 20:44
@SpikeX - I was being snarky.
– ChaosPandion
May 15 '13 at 20:46
== false
? Why not !
?– qJake
May 15 '13 at 20:43
== false
? Why not !
?– qJake
May 15 '13 at 20:43
@SpikeX - Its so you know it is a boolean!!!!
– ChaosPandion
May 15 '13 at 20:44
@SpikeX - Its so you know it is a boolean!!!!
– ChaosPandion
May 15 '13 at 20:44
@SpikeX I personally think that
!int.TryParse(l, out i)
looks too similar to int.TryParse(l, out i)
It improves readability for me– Sam I am
May 15 '13 at 20:44
@SpikeX I personally think that
!int.TryParse(l, out i)
looks too similar to int.TryParse(l, out i)
It improves readability for me– Sam I am
May 15 '13 at 20:44
@ChaosPandion Your IDE should be responsible for relaying type information, not your code.
– qJake
May 15 '13 at 20:44
@ChaosPandion Your IDE should be responsible for relaying type information, not your code.
– qJake
May 15 '13 at 20:44
@SpikeX - I was being snarky.
– ChaosPandion
May 15 '13 at 20:46
@SpikeX - I was being snarky.
– ChaosPandion
May 15 '13 at 20:46
|
show 1 more comment
There are various ways you can handle this. One way it to wrap all of this in a loop allowing a given number of retries or just a while loop that keeps going until the user enters valid input. Another is to put it all in a method and call it recursively from the catch block. I think the best solution is neither, instead I would use Int.TryParse
and I would have that inside a while loop like;
while (!Int32.TryParse(input, out line))
{
Console.WriteLine("Invalid input. Please enter 1, 2, or 3.");
input = Console.ReadLine();
}
add a comment |
There are various ways you can handle this. One way it to wrap all of this in a loop allowing a given number of retries or just a while loop that keeps going until the user enters valid input. Another is to put it all in a method and call it recursively from the catch block. I think the best solution is neither, instead I would use Int.TryParse
and I would have that inside a while loop like;
while (!Int32.TryParse(input, out line))
{
Console.WriteLine("Invalid input. Please enter 1, 2, or 3.");
input = Console.ReadLine();
}
add a comment |
There are various ways you can handle this. One way it to wrap all of this in a loop allowing a given number of retries or just a while loop that keeps going until the user enters valid input. Another is to put it all in a method and call it recursively from the catch block. I think the best solution is neither, instead I would use Int.TryParse
and I would have that inside a while loop like;
while (!Int32.TryParse(input, out line))
{
Console.WriteLine("Invalid input. Please enter 1, 2, or 3.");
input = Console.ReadLine();
}
There are various ways you can handle this. One way it to wrap all of this in a loop allowing a given number of retries or just a while loop that keeps going until the user enters valid input. Another is to put it all in a method and call it recursively from the catch block. I think the best solution is neither, instead I would use Int.TryParse
and I would have that inside a while loop like;
while (!Int32.TryParse(input, out line))
{
Console.WriteLine("Invalid input. Please enter 1, 2, or 3.");
input = Console.ReadLine();
}
edited Nov 21 '18 at 12:33
Dmitry Bychenko
111k1098140
111k1098140
answered May 15 '13 at 20:43
evanmcdonnalevanmcdonnal
28.7k115681
28.7k115681
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f16574556%2fhow-to-re-ask-for-input-in-try-catch-statement%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
5
Seems you should learn what a loop is before you start using try catch.
– ChaosPandion
May 15 '13 at 20:42