Entwickler-Ecke
C# - Die Sprache - C# Consolen text abfrage
storestore - Do 01.09.11 23:18
Titel: C# Consolen text abfrage
Hallo,
neues Thema neues Glück!
Also,
ich will nun abfragen das wenn das was die Console rückgibt ein Buchstabe ist das dan Ein Text wie z.B Console.WriteLine("Bitte nur zahlen eingeben!!!");
Naja nur das Problem ist, mit was mache ich das am besten?
Mit einer if anweisung oder mit einer switch-case anweisung?
Ich habe es mal mit einer switch-case anweisung versucht
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| string text= Console.ReadLine(); switch(text) { case "A": Console.WriteLine("Bitte nur zahlen eingeben!!!") break; case "B": Console.WriteLine("Bitte nur zahlen eingeben!!!") break; case "C": Console.WriteLine("Bitte nur zahlen eingeben!!!") break; } |
Wenn ich jetzt z.B. A eingebe dann gibt er mir dieses: "Bitte nur zahlen eingeben!!!" aus.
Aber wenn ich jetzt ABC eingebe dann stürzt er ab. Aber wie kann ich das lösen? Ich kann ja nicht alle Wörter der Welt in meine switch-case anweisung einbauen?!
Mfg Storestore
Yogu - Do 01.09.11 23:32
storestore hat folgendes geschrieben : |
Halloich will nun abfragen das wenn das was die Console rückgibt ein Buchstabe ist das dan Ein Text wie z.B Console.WriteLine("Bitte nur zahlen eingeben!!!"); |
Seltsam: Dem Benutzer sagst du, dass
nur Zahlen eingegeben werden dürfen, dem Programm aber, dass
keine Buchstaben erlaubt sind. Was trifft es wohl eher?
storestore hat folgendes geschrieben : |
wenn ich jetzt ABC eingebe dann stürzt er ab. |
Wenn du das Programm aus Visual Studio heraus aufrufst, stürzt es nicht ab. Es zeigt dir eine Exception angezeigt, beim Aufruf der
int.Parse-Methode, oder? Und jetzt such mal nach einer Methode, die keine Exception wirft, wenn sie falsche Eingaben bekommt, sondern dir den Fehler anders mitteilt. Ist gar nicht so schwer.
storestore - Fr 02.09.11 00:46
Oder ich versuch es mit try and catch!
bakachan - Fr 02.09.11 08:22
Schau lieber mal ob dir int nicht noch andere Funktionen bereitstellt. Parse hast du ja schon gefunden aber es gibt da bessere Varianten die auch mit falschen Eingaben umgehen können.
storestore - Fr 02.09.11 11:08
bakachan hat folgendes geschrieben : |
Schau lieber mal ob dir int nicht noch andere Funktionen bereitstellt. Parse hast du ja schon gefunden aber es gibt da bessere Varianten die auch mit falschen Eingaben umgehen können. |
Ok, was wäre den an try and catch so schlimm? Das ist doch eig. genau das was ich möchte.
dark-destination1988 - Fr 02.09.11 11:16
if(int.TryParse(source,target)==true)
//erfolgreich
else
//nicht erfolgreich
pdelvo - Fr 02.09.11 11:19
storestore hat folgendes geschrieben : |
bakachan hat folgendes geschrieben : | Schau lieber mal ob dir int nicht noch andere Funktionen bereitstellt. Parse hast du ja schon gefunden aber es gibt da bessere Varianten die auch mit falschen Eingaben umgehen können. |
Ok, was wäre den an try and catch so schlimm? Das ist doch eig. genau das was ich möchte. |
try-catch Böcke sind für sowas nicht gedacht. Es ist ganz schlechter Styl sie für solches zu missbrauchen.
dark-destination1988 hat die beste Lösung gepostet, bis auf zwei kleinigkeiten.
C#-Quelltext
1: 2: 3: 4: 5: 6:
| int zahl; string text = Console.ReadLine(); if(int.TryParse(text,out zahl)) else |
dark-destination1988 - Fr 02.09.11 11:21
sorry das mit dem out hat ich auch gerade gemerkt ;) und das true schreib ich immer mit hin (klar ist es unnötig aber besser lesbar)
storestore - Fr 02.09.11 11:27
Ok, danke klappt super. Denoch würde ich gerne wissen wozu eig. try and catch dient!
pdelvo - Fr 02.09.11 11:32
storestore hat folgendes geschrieben : |
Ok, danke klappt super. Denoch würde ich gerne wissen wozu eig. try and catch dient! |
try-catch dient zum Abfangen von Exceptions(Ausnahmen). Wie der Name schon sagt sind Ausnahmen Dinge, die nicht zum festen Programmablauf gehören. Wenn es geht sollte man daher versuchen Eingaben vorher zu prüfen, und nicht die Exception zum prüfen von Eingaben missbrauchen.
bakachan - Fr 02.09.11 11:33
storestore hat folgendes geschrieben : |
Ok, was wäre den an try and catch so schlimm? Das ist doch eig. genau das was ich möchte. |
Nehmen wir mal ein Beispiel:
Du willst mit einem Auto fahren weisst aber nicht ob die Bremsen funktionieren.
Die TryParse Variante wäre zu probieren ob die Bremsen greifen, wenn nicht weisst du es vorher.
Die Try Catch Variante heisst du fährst einfach los und merkst während der Fahrt das die Bremsen nicht funktionieren also fährst du gegen einen Baum. Aber macht ja nichts, die Airbags (Catch) haben dich ja gerettet.
Try Catch ist für Sachen die du nicht kontrollieren kannst. Nehmen wir zum Beispiel mal an du willst eine Datei im Netzwerk lesen aber in dem Moment zieht der andere das LAN-Kabel raus. Anstatt nun das ganze Programm Abstürzt kannst du mit dem Catch den Fehler auswerten/behandeln.
Oder für Fehlerberichte:
Man kann im äußersten Bereich der Anwendung ein TryCatch verwenden um Fehlerberichte zu erstellen.
Quasi wenn irgendein unerwarteter Fehler auftritt wird es wenigstens noch protokolliert und kann an den Entwickler gesendet werden.
storestore - Fr 02.09.11 13:01
Naja, da das Prgramm das ich programmierer zu Übungszwecken dient will ich es auch mit try und catch versuchen
dark-destination1988 - Fr 02.09.11 13:14
viel spaß beim gegen baum fahren ;)
Yogu - Fr 02.09.11 13:18
storestore hat folgendes geschrieben : |
will ich es auch mit try und catch versuchen |
:zustimm:
Solange du die Ratschläge im Kopf behältst und in der fertigen Anwendung berücksichtigst.
storestore - Fr 02.09.11 13:26
Hallo,
ja natürlich werde ich die Ratschläge im Kopf behalten. Da es aber wirkch nur zu übungszwecken dient würde ich es mal gernen mit try und catch versuchen
storestore - Fr 02.09.11 21:27
Hier ist mal der neue Code:
Sorry für den dopple post aber sonst kommt man durcheinander *Rausreden*
Da ich es ja mit try and catch versuchen wollte bliebe mir eig. nix anders möglich als alles in eine Methode abzuwickeln, oder? Wenn ich in catch einfach wieder eine Schleife einbinde, bringt mir das nix. Wenn mir der user wieder ein Buchstabe eingibt dann habe ich den gleichen salat wie in der aller ersten Frage beschrieben. (Aber ein Salat ohne Dressing, frischen Gemüse und saftigen geilen Chrimps *Hmmmm*)
mfg storestore
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93:
| using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace ConsoleApplication1 { class Program {
static void Main(string[] args) { Methode(); } static void Methode() {
try { string wiederholen; string darfnichtsein;
do {
Console.WriteLine("Hallo, geben sie bitte ihr aktuelles \"Vermögen\" ein!"); darfnichtsein = Console.ReadLine(); double geld = Convert.ToDouble(darfnichtsein);
Console.WriteLine("Wollen sie was drauf zahlen oder abziehen?"); Console.WriteLine("D= draufzahlen, A=Abziehen!"); string text = Console.ReadLine(); if (text == "D" || text == "d") { Console.WriteLine("Wie viel wollen sie drauf zahlen?"); double draufzahlen = Convert.ToDouble(Console.ReadLine()); geld = geld + draufzahlen; Console.WriteLine("Ihr aktuelles Guthaben= " + geld + " Euro"); Console.ReadLine(); } else if (text == "A" || text == "a") { Console.WriteLine("Wie viel wollen sie abheben?"); double abheben = Convert.ToDouble(Console.ReadLine()); geld = geld - abheben; Console.WriteLine("Ihr aktuelles Guthaben= " + geld + " Euro"); Console.ReadLine(); } else { Console.WriteLine("Bitt nur zwischen 'A'oder 'a' und 'D'oder'd' auswählen"); Console.ReadLine(); } Console.WriteLine("Nochmal? Dan drücker 'N' oder'n'"); Console.WriteLine("Oder lieber raus ins Freie? ;) Dann einfach exit eingeben"); wiederholen = Console.ReadLine();
Console.Clear();
} while (wiederholen == "N" || wiederholen == "n"); }
catch { Console.WriteLine("Bitte Nur zahlen angeben" + " nächster versuch *Augen roll !!!* Bitte Enter drücken "); Console.ReadLine(); Console.Clear(); Methode();
} } } } |
Yogu - Sa 03.09.11 12:32
Schon wieder eine Rekursion, und jetzt auch noch parallel zur Schleife. Du bist einfach unverbesserlich... :roll:
storestore - Sa 03.09.11 12:36
Hi, ja aber wie soll ich das den sonst machen wenn ich try and catch verwenden will? Ich kann es ja wieder mit einer schleife machen aber wenn ich das zweite mal auch wieder Buchstaben eingebe dann stürtzt er ab! Aber alle machen viele Sachen mit Methoden wieso gibt es bei mir sofort eine rekursion?
Horschdware - Sa 03.09.11 13:14
Irgendwie wird hier am selben Programm in zwei unterschiedlichen Forenthreads gebastelt und die Erkenntnisse aus dem einen Thread gelangen nicht in den anderen.
Vgl. hier
http://www.c-sharp-forum.de/viewtopic.php?p=649488#649488 - da ist das mit der Rekursion bereits gelöst.
storestore - So 04.09.11 10:06
Nene! Das eine war nur für die Methode. Das hier ist der versuch mit Try und catch! Aber ohne eine Methode bekomme ich das nicht hin!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!