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
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 kannCode: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; } }
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
Thema: C# Fehlereingrenzung
-
24.09.2008, 18:24 #1
C# Fehlereingrenzung
- Anzeige
Logge dich ein, um diese Anzeige nicht zu sehen. -
24.09.2008, 18:33 #2Cadet 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. ;-)
-
24.09.2008, 20:51 #3
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
-
24.09.2008, 21:41 #4
AW: C# Fehlereingrenzung
Das goto schaust du dir bitte nicht ab, das ist pfui bah.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; } }
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.
-
24.09.2008, 23:04 #5
AW: C# Fehlereingrenzung
cYaInH3ll danke für die antwort
aber ich habe mir auch schon ein paar gedanken gemacht und ein bisschen was geschrieben
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.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; } } }
-
25.09.2008, 12:59 #6
AW: C# Fehlereingrenzung
du könntest die überprüfung auch einfacher machen

des Weiteren hast du dann im integert "wert" die Zahl soferns geklappt hatCode:int wert = 0; int.TryParse(intAlsZeichenkette, out wert); //gibt dir einen bool zurück //ob der wert in einen int geparsed werden konnte
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

Zitieren
