1. #1
    Lt. Junior Grade
    Dabei seit
    Jan 2006
    Beiträge
    297

    C# Fehlereingrenzung

    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

  2. Anzeige
    Logge dich ein, um diese Anzeige nicht zu sehen.
  3. #2
    Cadet 4th Year
    Dabei seit
    Okt 2002
    Beiträge
    108

    AW: C# Fehlereingrenzung

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

  4. #3
    Lt. Junior Grade
    Ersteller dieses Themas

    Dabei seit
    Jan 2006
    Beiträge
    297

    AW: C# Fehlereingrenzung

    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

  5. #4
    Commander
    Dabei seit
    Mär 2008
    Beiträge
    2.238

    AW: C# Fehlereingrenzung

    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.
    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.
    [FAQ] Programmieren für Anfänger
    Zitat Zitat von Blutschlumpf Beitrag anzeigen
    Ich konnte nur bis zur Hälfte lesen, dann ist mein Bullshit-Puffer übergelaufen.

  6. #5
    Lt. Junior Grade
    Ersteller dieses Themas

    Dabei seit
    Jan 2006
    Beiträge
    297

    AW: C# Fehlereingrenzung

    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.

  7. #6
    Ensign
    Dabei seit
    Apr 2008
    Beiträge
    247

    AW: C# Fehlereingrenzung

    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;
    
            }
        }
    }
    Geändert von ichhalt123 (25.09.2008 um 13:07 Uhr)
    ASRock Z68 Extreme 3 Gen. 3 / Intel i5-2500K / 4x4GB G-Skill DDR3 / Sapphire Radeon HD 6970 /
    Samsung 2xHD501LJ 1xHD753LJ/ Win7 Pro 64bit/Antec P182/Samsung 226BW 171s/Teufel CEM PE

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •