Hänz Geschrieben 15. Januar 2010 Geschrieben 15. Januar 2010 hi leute! wie ihr seht, bin ich neu hier. dementsprechend bin ich auch ein totaler anfänger, was das programmieren angeht! ich habe folgendes problem: ich habe ein menü erstellt, wo der user eine eingabe machen muss, um zu verschiedenen aufgaben zu gelangen. das passiert via switch und case. nun ist mein problem, das wenn der user einen buchstaben, oder ein zeichen oder ausversehen 2 x enter drückt, ich sofort eine fehlermeldung bekomme! das menü sieht so aus: class Program { static void Main(string[] args) { double dZinssatz, dBetrag, dKapital = 1, dZ, dB; int i, iEingabe, iAufgabe, iLaufzeit, iL ; long lFakultaet; do { Console.WriteLine(""); Console.WriteLine("Suchen Sie sich bitte eine der folgenden Aufgaben aus:"); Console.WriteLine(""); Console.WriteLine("Aufgabe 1 <1>"); Console.WriteLine("Aufgabe 2 <2>"); Console.WriteLine("Aufgabe 3 <3>"); Console.WriteLine("Aufgabe 4 <4>"); Console.WriteLine("Aufgabe 5 <5>"); Console.WriteLine("Aufgabe 6 <6>"); Console.WriteLine("Aufgabe 7 <7>"); Console.WriteLine("Programm beenden <0>"); Console.WriteLine(""); Console.WriteLine(""); iAufgabe = Convert.ToInt32(Console.ReadLine()); Console.Clear(); switch (iAufgabe) { case 0: Console.WriteLine("Das Programm wird beendet."); break; case 1: . . . default: Console.WriteLine(); Console.WriteLine("!!Ungültige Eingabe!!"); Console.WriteLine(); Console.WriteLine("Bitte wählen sie eine Zahl zwischen 1 und 7 um eine Aufgabe zu starten oder die 0 um das Programm zu verlassen!"); break; } } while (iAufgabe != 0); Console.ReadKey(); } wie bekomm ich das hin, das er schaut, ob's eine der menü-zahlen ist und ansonsten halt den hinweis schreibt, das die eingabe falch war? schon mal danke für die hilfe! Zitieren
LadyPreis Geschrieben 15. Januar 2010 Geschrieben 15. Januar 2010 pack die konvertierung in einen try-catch-block. damit fängst du konvertierungsprobleme ab. so kannst du einen standardwert(z.b. -1) setzen, wenn es beim umwandeln zu einem fehler kam Zitieren
Pointerman Geschrieben 15. Januar 2010 Geschrieben 15. Januar 2010 Schau Dir ansonsten mal bool Int.TryParse(string, out int) an. Damit kannst Du versuchen einen String umzuwandeln. Wenn die Umwandlung funktioniert, liefert es true zurueck und traegt die Zahl in den Int ein. Damit kannst Du Dir das Abfangen der Exception sparen. Zitieren
LadyPreis Geschrieben 15. Januar 2010 Geschrieben 15. Januar 2010 Schau Dir ansonsten mal bool Int.TryParse(string, out int) an. Damit kannst Du versuchen einen String umzuwandeln. Wenn die Umwandlung funktioniert, liefert es true zurueck und traegt die Zahl in den Int ein. Damit kannst Du Dir das Abfangen der Exception sparen. Das wäre sogar die elegantere Methode. Bin ich denn schon so eingerostet? :upps Zitieren
Hänz Geschrieben 15. Januar 2010 Autor Geschrieben 15. Januar 2010 so, hab jetzt ein bissel rumgebastelt und es haut hin! hab aber trotzdem noch ein problem und hoffe, ihr könnt mir bei der lösung helfen (und zwar so, dass ich es verstehe!^^) er filtert jetzt die fehleingaben raus und alles ist prima, nur das ich bei den fehleingaben aus buchstaben, zeichen etc jetzt mit einer goto-anweisung gearbeitet habe! ich weiß aber auch, dass diese veraltet und nicht gern gesehen sind! ich weiß sonst einfach keinen anderen weg, wie ich vom "else"-fall wieder zum start (auswahlmenü) gelange. ich denke mal "... wald vor lauter bäumen" und so^^ need help! class Program { static void Main(string[] args) { double dZinssatz, dBetrag, dKapital = 1, dZ, dB; int i, iEingabe, iAufgabe, iLaufzeit, iL ; long lFakultaet; string sAufgabe; start: do { Console.WriteLine(""); Console.WriteLine("Suchen Sie sich bitte eine der folgenden Aufgaben aus:"); Console.WriteLine(""); Console.WriteLine("Aufgabe 1 <1>"); Console.WriteLine("Aufgabe 2 <2>"); Console.WriteLine("Aufgabe 3 <3>"); Console.WriteLine("Aufgabe 4 <4>"); Console.WriteLine("Aufgabe 5 <5>"); Console.WriteLine("Aufgabe 6 <6>"); Console.WriteLine("Aufgabe 7 <7>"); Console.WriteLine("Programm beenden <0>"); Console.WriteLine(""); Console.WriteLine(""); sAufgabe = Convert.ToString(Console.ReadLine()); Console.Clear(); if (Int32.TryParse(sAufgabe, out iAufgabe)) { switch (iAufgabe) { case 0: Console.WriteLine("Das Programm wird beendet."); break; case 1: //-----------// Es soll mit einer kopfgesteuerten Schleife 100 mal "Hallo" ausgegeben werden //-Aufagbe-1-// //-----------// Console.WriteLine("Aufgabe 1"); . . . default: Console.WriteLine(); Console.WriteLine("!!Ungültige Eingabe!!"); Console.WriteLine(); Console.WriteLine("Bitte wählen sie eine Zahl zwischen 1 und 7 um eine Aufgabe zu starten oder die 0 um das Programm zu verlassen!"); break; } } else { Console.WriteLine(); Console.WriteLine("!!Ungültige Eingabe!!"); Console.WriteLine(); Console.WriteLine("Bitte wählen sie eine Zahl zwischen 1 und 7 um eine Aufgabe zu starten oder die 0 um das Programm zu verlassen!"); goto start; } } while (iAufgabe != 0); Console.ReadKey(); } } } Zitieren
Pointerman Geschrieben 15. Januar 2010 Geschrieben 15. Januar 2010 Es gibt die Continue-Anweisung. Damit wird die Ausführung mit der nächsten Schleifenausführung fortgesetzt. Ich glaube, dass TryParse den Int auf 0 setzt, also müsstest Du in Deinem else-Teil noch den Wert auf z.B. -1 setzen, damit die Schleife auch weiter fortgesetzt wird. Alternativ kannst Du für den Punk "Abbrechen" auch einen Wert != 0 verwenden. Zitieren
LadyPreis Geschrieben 16. Januar 2010 Geschrieben 16. Januar 2010 setz in deinem else-teil den Wert von iAufgabe doch einfach auf einen fiktiven Wert, z.B. -1 bei deinem aktuellen quelltext wird die abbruchbedingung der schleife doch erst danach geprüft. da die bedingung so für einen weiteren schleifendurchlauf erfüllt ist, kannst du dir die goto-anweisung auch sparen Zitieren
Hänz Geschrieben 4. Februar 2010 Autor Geschrieben 4. Februar 2010 ok, da bin ich wieder! hab des gerade mal umgestellt (also bei "else" iAufgabe = -1) und es funtioniert tadellos! besten dank an euch kompetente problemlöser! mfg, hänz. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.