Mein Problem ist, dass die Variable number nach dem Abfangen der ersten Ausnahme bereits einen anderen Wert als Null hat. Wenn also die zweite Ausnahme ausgelöst wird. Es springt einfach aus meiner Do-While-Schleife heraus. Ich möchte in der Lage sein, zwei oder mehr Ausnahmen abzufangen, abhängig von Benutzereingaben, ohne dass diese aus der Schleife springen.

Irgendwelche Gedanken? Ich bin neu in der Codierung, hoffe also, dass Sie es einfach halten können :)

int number = 0;
int svar = 2; // set by the user; for example 2

do
{
    try
    { 
       for (int i = 0; i < svar; i++)
       {
           Console.Write("\nWrite the number you would like to add to your list: ");
           nummer = int.Parse(Console.ReadLine());
       }

    }
    catch
    {
        Console.WriteLine("\n-- ERROR --");
        Console.WriteLine("You typed a letter instead of a number, try again!");
    }

    myList.Add(number);

} while (number == 0);
-1
Japoc 18 Jän. 2019 im 11:47

4 Antworten

Beste Antwort

Sie können int.TryParse verwenden, siehe Beispiel unten

 for (int i = 0; i < svar; i++)
 {
     Console.Write("\nWrite the number you would like to add to your list: ");
     while (!int.TryParse(Console.ReadLine(), out number))
     {
         Console.WriteLine("\n-- ERROR --");
         Console.WriteLine("You typed a letter instead of a number, try again!");
     }

     myList.Add(number);
 }
1
opewix 18 Jän. 2019 im 08:54

Lassen Sie uns den Code einfach halten - lassen Sie uns die Methode InputInteger extrahieren; Ein weiterer Vorschlag ist die Verwendung von TryParse anstelle von Exception Catching :

   private static int InputInteger(string title) {
     Console.WriteLine(); 

     // Keep on asking user
     while (true) {
       if (!string.IsNullOrEmpty(title)) 
         Console.Write(title);

       // if correct integer value provided, return it
       if (int.TryParse(Console.ReadLine(), out var result)) 
         return result;

       // in case of syntax error print the message
       Console.WriteLine("-- ERROR --");
       Console.WriteLine("Please, type integer number, try again!");
     }
   }  

Dann können Sie es verwenden, wann immer Sie einen ganzzahligen Benutzereingabewert wünschen:

   int svar = InputInteger("How many items would you like to have in the list?");

   ...

   // get svar integer items 
   for (int i = 0; i < svar; ++i)
     myList.Add(InputInteger("Write the number you would like to add to your list: ")); 
2
Dmitry Bychenko 18 Jän. 2019 im 09:43

Sie müssen den Try-Block wie folgt verwenden

  int number = 0;
int svar = set by the user for exempel 2

do
{

       for (int i = 0; i < svar; i++)
       {
 try
  {
       Console.Write("\nWrite the number you would like to add to your list: ");
       nummer = int.Parse(Console.ReadLine());
   }

   catch
   {
   Console.WriteLine("\n-- ERROR --");
   Console.WriteLine("You typed a letter instead of a number, try again!");
   }

   myList.Add(number);

   }

} while (number == 0);
0
Gaurav 18 Jän. 2019 im 08:56

Ich schätze, dass Sie neu in der Codierung sind. Willkommen und ich hoffe es gefällt euch.

Ich habe den Code ein wenig überarbeitet, um ihn einfacher und fehlerfreier zu machen:

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            ProcessNumbers();
        }

        private static void ProcessNumbers()
        {
            var myList = new List<int>();
            string sinput = String.Empty;
            var number = 0;
            do
            {
                try
                {
                    Console.Write("Write the number you would like to add to your list (type stop when you are done): ");
                    var input = Console.ReadLine();

                    if(input != "stop")
                    {
                        number = int.Parse(input);
                        myList.Add(number);
                    }
                    else
                    {
                        sinput = input;
                    }
                }
                catch
                {
                    Console.WriteLine("ERROR: You typed a letter instead of a number, try again!");
                }

            } while (sinput != "stop");

            var sum = myList.Sum();
            Console.WriteLine("The sum of all your numbers is: " + sum);
            Console.Write("Press any key to exist...");
            Console.ReadKey();
        }
    }
}

Grundsätzlich wird der Benutzer ständig aufgefordert, die Eingabe von Nummern fortzusetzen, bis die Benutzertypen aufhören. Am Ende wird die Summe aller Zahlen angezeigt. Lassen Sie mich wissen, wenn Sie Fragen zum Code haben.

0
Tanveer Yousuf 18 Jän. 2019 im 09:15