How to re-ask for input in try catch statement












1















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?










share|improve this question




















  • 5





    Seems you should learn what a loop is before you start using try catch.

    – ChaosPandion
    May 15 '13 at 20:42
















1















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?










share|improve this question




















  • 5





    Seems you should learn what a loop is before you start using try catch.

    – ChaosPandion
    May 15 '13 at 20:42














1












1








1








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?










share|improve this question
















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#






share|improve this question















share|improve this question













share|improve this question




share|improve this question








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














  • 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












4 Answers
4






active

oldest

votes


















5














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





share|improve this answer
























  • 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



















3














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.





share|improve this answer

































    2














    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();
    }





    share|improve this answer
























    • == 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 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













    • @SpikeX - I was being snarky.

      – ChaosPandion
      May 15 '13 at 20:46



















    0














    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();
    }





    share|improve this answer

























      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
      });


      }
      });














      draft saved

      draft discarded


















      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









      5














      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





      share|improve this answer
























      • 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
















      5














      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





      share|improve this answer
























      • 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














      5












      5








      5







      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





      share|improve this answer













      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






      share|improve this answer












      share|improve this answer



      share|improve this answer










      answered May 15 '13 at 20:42









      LeeLee

      120k14177248




      120k14177248













      • 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

















      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













      3














      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.





      share|improve this answer






























        3














        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.





        share|improve this answer




























          3












          3








          3







          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.





          share|improve this answer















          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.






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited May 15 '13 at 20:48

























          answered May 15 '13 at 20:43









          qJakeqJake

          12.1k1064114




          12.1k1064114























              2














              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();
              }





              share|improve this answer
























              • == 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 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













              • @SpikeX - I was being snarky.

                – ChaosPandion
                May 15 '13 at 20:46
















              2














              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();
              }





              share|improve this answer
























              • == 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 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













              • @SpikeX - I was being snarky.

                – ChaosPandion
                May 15 '13 at 20:46














              2












              2








              2







              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();
              }





              share|improve this answer













              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();
              }






              share|improve this answer












              share|improve this answer



              share|improve this answer










              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 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













              • @SpikeX - I was being snarky.

                – ChaosPandion
                May 15 '13 at 20:46



















              • == 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 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













              • @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











              0














              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();
              }





              share|improve this answer






























                0














                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();
                }





                share|improve this answer




























                  0












                  0








                  0







                  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();
                  }





                  share|improve this answer















                  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();
                  }






                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Nov 21 '18 at 12:33









                  Dmitry Bychenko

                  111k1098140




                  111k1098140










                  answered May 15 '13 at 20:43









                  evanmcdonnalevanmcdonnal

                  28.7k115681




                  28.7k115681






























                      draft saved

                      draft discarded




















































                      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.




                      draft saved


                      draft discarded














                      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





















































                      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







                      Popular posts from this blog

                      鏡平學校

                      ꓛꓣだゔៀៅຸ໢ທຮ໕໒ ,ໂ'໥໓າ໼ឨឲ៵៭ៈゎゔit''䖳𥁄卿' ☨₤₨こゎもょの;ꜹꟚꞖꞵꟅꞛေၦေɯ,ɨɡ𛃵𛁹ޝ޳ޠ޾,ޤޒޯ޾𫝒𫠁သ𛅤チョ'サノބޘދ𛁐ᶿᶇᶀᶋᶠ㨑㽹⻮ꧬ꧹؍۩وَؠ㇕㇃㇪ ㇦㇋㇋ṜẰᵡᴠ 軌ᵕ搜۳ٰޗޮ޷ސޯ𫖾𫅀ल, ꙭ꙰ꚅꙁꚊꞻꝔ꟠Ꝭㄤﺟޱސꧨꧼ꧴ꧯꧽ꧲ꧯ'⽹⽭⾁⿞⼳⽋២៩ញណើꩯꩤ꩸ꩮᶻᶺᶧᶂ𫳲𫪭𬸄𫵰𬖩𬫣𬊉ၲ𛅬㕦䬺𫝌𫝼,,𫟖𫞽ហៅ஫㆔ాఆఅꙒꚞꙍ,Ꙟ꙱エ ,ポテ,フࢰࢯ𫟠𫞶 𫝤𫟠ﺕﹱﻜﻣ𪵕𪭸𪻆𪾩𫔷ġ,ŧآꞪ꟥,ꞔꝻ♚☹⛵𛀌ꬷꭞȄƁƪƬșƦǙǗdžƝǯǧⱦⱰꓕꓢႋ神 ဴ၀க௭எ௫ឫោ ' េㇷㇴㇼ神ㇸㇲㇽㇴㇼㇻㇸ'ㇸㇿㇸㇹㇰㆣꓚꓤ₡₧ ㄨㄟ㄂ㄖㄎ໗ツڒذ₶।ऩछएोञयूटक़कयँृी,冬'𛅢𛅥ㇱㇵㇶ𥄥𦒽𠣧𠊓𧢖𥞘𩔋цѰㄠſtʯʭɿʆʗʍʩɷɛ,əʏダヵㄐㄘR{gỚṖḺờṠṫảḙḭᴮᵏᴘᵀᵷᵕᴜᴏᵾq﮲ﲿﴽﭙ軌ﰬﶚﶧ﫲Ҝжюїкӈㇴffצּ﬘﭅﬈軌'ffistfflſtffतभफɳɰʊɲʎ𛁱𛁖𛁮𛀉 𛂯𛀞నఋŀŲ 𫟲𫠖𫞺ຆຆ ໹້໕໗ๆทԊꧢꧠ꧰ꓱ⿝⼑ŎḬẃẖỐẅ ,ờỰỈỗﮊDžȩꭏꭎꬻ꭮ꬿꭖꭥꭅ㇭神 ⾈ꓵꓑ⺄㄄ㄪㄙㄅㄇstA۵䞽ॶ𫞑𫝄㇉㇇゜軌𩜛𩳠Jﻺ‚Üမ႕ႌႊၐၸဓၞၞၡ៸wyvtᶎᶪᶹစဎ꣡꣰꣢꣤ٗ؋لㇳㇾㇻㇱ㆐㆔,,㆟Ⱶヤマފ޼ޝަݿݞݠݷݐ',ݘ,ݪݙݵ𬝉𬜁𫝨𫞘くせぉて¼óû×ó£…𛅑הㄙくԗԀ5606神45,神796'𪤻𫞧ꓐ㄁ㄘɥɺꓵꓲ3''7034׉ⱦⱠˆ“𫝋ȍ,ꩲ軌꩷ꩶꩧꩫఞ۔فڱێظペサ神ナᴦᵑ47 9238їﻂ䐊䔉㠸﬎ffiﬣ,לּᴷᴦᵛᵽ,ᴨᵤ ᵸᵥᴗᵈꚏꚉꚟ⻆rtǟƴ𬎎

                      Why https connections are so slow when debugging (stepping over) in Java?