C# Fehlereingrenzung

Drachenmeister

Lt. Junior Grade
Registriert
Jan. 2006
Beiträge
472
guten tag zusammen,

ich habe mal eine kleine frage und zwar binn ich gerade ein bisschen in c# am programmieren an einem Bruchrechner. Der is soweit auch schon fast fertig nur jetzt fehlt mir noch eine sache und die wäre das ich gerne eine Methode schreiben würde die ich nach jeder Eingabe auf rufe und die dann meine eingabe über prüft ob die gültig ist und wenn nicht mit dann sagt wiederholen oder nochmal eingaben.

Ich habe mir soweit schon ein paar gedanken gemacht nur gibt es da bei dann ein probleme.

also hier mal ein kleiner ausschnitt aus den program

Eingabe wurde als int deklariet
Code:
                Console.Clear();
                Console.WriteLine("\t\t\t\t Bruch-Rechner");
                Console.WriteLine("\t\t\t\t***************\n\n");
                Console.WriteLine("\t\t\t\tBruch1   Bruch2\n");
                Console.WriteLine("\t\t\t\t  {0}       {1}", Zähler1, Zähler2);
                Console.WriteLine("\t\t\t\t~~~~~~   ~~~~~~");
                Console.WriteLine("\t\t\t\t  {0}       {1}\n\n", Nenner1, Nenner2);
                Console.WriteLine("\t\t\t\t1. Addieren");
                Console.WriteLine("\t\t\t\t2. Subtrahieren");
                Console.WriteLine("\t\t\t\t3. Multiplizieren");
                Console.WriteLine("\t\t\t\t4. Dividieren");
                Console.WriteLine("\t\t\t\t5. Einstellungen");
                Console.WriteLine("\t\t\t\t6. Bruch-Rechen-Regeln");
                Console.WriteLine("\t\t\t\t7. Beenden\n\n\n");
                Console.WriteLine("Bitte geben sie eine Wahl an: ");

                Eingabe = Convert.ToInt32(Console.ReadLine());
               
                if (Eingabe == 1)
                {
                    Console.Clear();
                    Console.WriteLine("\t\t\t Bruch-Rechner Addieren");
                    Console.WriteLine("\t\t\t************************");

                    Rechnung.Addieren();
                    Rechnung.Kürzen();

                    Console.WriteLine("\nBeenden ( j / n )?");
                    if (Console.ReadLine() == "j")
                    {
                        Beenden = false;
                    }
                }

wenn ich jetzt eingabe als string machen würde dann könnte man den string in der methode zerlegen und über prüfen oder er nur aus Zahlen besteht. Aber dann besteht nachher das problem bei der if abfrage das man dort keinen string nehmen kann


vil weiß ja einer von euch eine lösung wie die methode aus sehen könnte und wie man das nachher mit der if abfrage regelt

mfg Drachenmeister
 
Du kannst mit Hilfe der Klasse "Convert" alles hin und her konvertieren.

Von String zu Int , von Int zu String.
Es ist also kein Problem die Eingabe als String einzulesen und später als Int umzukonvertieren.

Also, damit du nicht großartig die Eingabe überprüfen musst, kannst Du auch das Konstrukt der "Switch-Case-Anweisung" verwenden. ;-)
 
wenn man aber ausversehen keine zahl sondern einen Buchstaben eingibt schmirt das programm ab und das würde ich gerne verhindern in dem ich eine fehler meldung ausgeben und die eingabe wiederholen lasse
 
Code:
    static void Main()
    {
        Input:
        string input = Console.In.ReadLine();
        try 
        {
            int number = Convert.ToInt32(input);
            Console.WriteLine(number);
        }
        catch (FormatException e)
        {
            Console.WriteLine(e.Message);
            Console.WriteLine("Bitte nur Zahlen eingeben!");
            goto Input;
        }
        
    }

Das goto schaust du dir bitte nicht ab, das ist pfui bah. :p
Du schreibst eine entsprechende Methode, die für die Eingabeaufforderung zuständig ist und die rufst du dann im catch auf, wo ich meine hässliche goto-Anweisung habe.
 
cYaInH3ll danke für die antwort

aber ich habe mir auch schon ein paar gedanken gemacht und ein bisschen was geschrieben

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace String_Test
{
    class Program
    {
        static void Main(string[] args)
        {
            string Eingabe;
            bool Wiederholen = false;

            Console.WriteLine("Test einagabe:");
            Eingabe = Console.ReadLine();
            EingabeÜberPrüfen(Eingabe, ref Wiederholen);
            if (Wiederholen == true)
            {
                Console.WriteLine("Falsche eingabe");
                Console.WriteLine("Bitte geben sie ihre Eingabe erneut ein !!!");
            }

            //????????????????????? Hier müsste man dann den string in int umwandeln
            // dann würden danach die if sachen folgen

            Console.ReadKey();
        }

        public static bool EingabeÜberPrüfen(string Benutzereingabe, ref bool Wieder)
        {
            int Schleifenzaehler1, Schleifenzaehler2;
            string ErlaubteZeichen = "0,1,2,3,4,5,6,7,8,9";
            bool AllesGueltig = true, GueltigesZeichen;

            for (Schleifenzaehler1 = 0; Schleifenzaehler1 < Benutzereingabe.Length; Schleifenzaehler1++) // Durchläufe der Schleife gleich Anzahl der Zeichen in der übegebenen Benutzereingabe.
            {
                GueltigesZeichen = false;

                for (Schleifenzaehler2 = 0; Schleifenzaehler2 < ErlaubteZeichen.Length; Schleifenzaehler2++) // Durchläufe der Schleife gleich Anzahl erlaubter Zeichen.
                {
                    if (Benutzereingabe[Schleifenzaehler1] == ErlaubteZeichen[Schleifenzaehler2])
                    {
                        GueltigesZeichen = true;
                    }
                }

                if (!GueltigesZeichen)
                {
                    AllesGueltig = false;
                }
            }

            if (AllesGueltig == true)
            {
                return Wieder;
            }
            if (AllesGueltig == false)
            {
                Wieder = true;
                return Wieder;
            }
            return AllesGueltig;

        }
    }
}

Das was jetzt noch Fehlt ist das ich den eingelesenen wert Eingabe der sich in dem String befindet nur noch wieder in Int bekommen muss damit ich dann in meinem Richtigen Programm die If anweisungen funktionieren.
 
du könntest die überprüfung auch einfacher machen :)

Code:
int wert = 0;
int.TryParse(intAlsZeichenkette, out wert); 
//gibt dir einen bool zurück 
//ob der wert in einen int geparsed werden konnte

des Weiteren hast du dann im integert "wert" die Zahl soferns geklappt hat

so in etwa könnte das dann aussehen

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace String_Test
{
    class Program
    {
        static void Main(string[] args)
        {
            string Eingabe;
            bool Wiederholen = false;

            Console.WriteLine("Test einagabe:");
            Eingabe = Console.ReadLine();
            //EingabeÜberPrüfen(Eingabe, ref Wiederholen);
            [B]int wert = 0;[/B]
           [B] while (!int.TryParse(Eingabe, out wert))[/B] //Solange die Eingabe nicht korrekt ist wird weiter abgefragt
            {
                Console.WriteLine("Falsche eingabe");
                Console.WriteLine("Bitte geben sie ihre Eingabe erneut ein !!!");
                [B]Eingabe = Console.ReadLine();[/B]
            }

            //????????????????????? Hier müsste man dann den string in int umwandeln
            // dann würden danach die if sachen folgen

            Console.ReadKey();
        }

        public static bool EingabeÜberPrüfen(string Benutzereingabe, ref bool Wieder)
        {
            int Schleifenzaehler1, Schleifenzaehler2;
            string ErlaubteZeichen = "0,1,2,3,4,5,6,7,8,9";
            bool AllesGueltig = true, GueltigesZeichen;

            for (Schleifenzaehler1 = 0; Schleifenzaehler1 < Benutzereingabe.Length; Schleifenzaehler1++) // Durchläufe der Schleife gleich Anzahl der Zeichen in der übegebenen Benutzereingabe.
            {
                GueltigesZeichen = false;

                for (Schleifenzaehler2 = 0; Schleifenzaehler2 < ErlaubteZeichen.Length; Schleifenzaehler2++) // Durchläufe der Schleife gleich Anzahl erlaubter Zeichen.
                {
                    if (Benutzereingabe[Schleifenzaehler1] == ErlaubteZeichen[Schleifenzaehler2])
                    {
                        GueltigesZeichen = true;
                    }
                }

                if (!GueltigesZeichen)
                {
                    AllesGueltig = false;
                }
            }

            if (AllesGueltig == true)
            {
                return Wieder;
            }
            if (AllesGueltig == false)
            {
                Wieder = true;
                return Wieder;
            }
            return AllesGueltig;

        }
    }
}
 
Zuletzt bearbeitet:
Zurück
Oben