| Autor |
Beitrag |
steffl2000
Hält's aus hier
Beiträge: 3
|
Verfasst: Fr 30.09.11 14:55
hallo zusammen, hab hier einen Rechner für die Konsole und noch ein Problem. Rechnen tut er schon mal  nur muss ich noch, wenn statt einer Zahl zb. ein Buchstabe eingegeben wird, eine Fehlermeldung ausgeben. Kann mir jemand vielleicht einen Denkanstoss geben? Kann ich das auch mit Switch bewerkstelligen? Wenn ja wie?
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:
| Console.Write("Bitte geben Sie die erste Zahl ein: "); Console.ForegroundColor = ConsoleColor.Yellow; string a = Console.ReadLine(); Console.ForegroundColor = ConsoleColor.Black; Console.Write("Bitte geben Sie die zweite Zahl ein: "); Console.ForegroundColor = ConsoleColor.Yellow; string b = Console.ReadLine(); Console.ForegroundColor = ConsoleColor.Black;
Console.Write("Bitte geben Sie einen Operator an [+,-,*,/]: "); Console.ForegroundColor = ConsoleColor.Yellow; string rechenart = Console.ReadLine(); Console.ForegroundColor = ConsoleColor.Black;
double zahla = Convert.ToDouble(a); double zahlb = Convert.ToDouble(b);
double ergebnis1 = zahla + zahlb; double ergebnis2 = zahla - zahlb; double ergebnis3 = zahla * zahlb; double ergebnis4 = zahla / zahlb;
switch (a) { ???? }
switch (rechenart) { case "+": Console.WriteLine("{0} + {1} = {2}", zahla, zahlb, ergebnis1); break;
case "-": Console.WriteLine("{0} - {1} = {2}", zahla, zahlb, ergebnis2); break;
case "*": Console.WriteLine("{0} * {1} = {2}", zahla, zahlb, ergebnis3); break;
case "/": Console.WriteLine("{0} / {1} = {2}", zahla, zahlb, ergebnis4); break;
default: Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Sie haben keinen gültigen Operator eingegeben."); Console.ForegroundColor = ConsoleColor.Black; break;
}
Console.WriteLine("Drücken Sie eine beliebige Taste um das Programm zu beenden"); Console.ReadKey(); |
Moderiert von Christian S.: C#-Tags hinzugefügt
|
|
storestore
      
Beiträge: 397
Erhaltene Danke: 7
WIN 7
C#
|
Verfasst: Fr 30.09.11 14:58
_________________ Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"
|
|
steffl2000 
Hält's aus hier
Beiträge: 3
|
Verfasst: Fr 30.09.11 15:04
ok, werds mir gleich mal ansehen
|
|
Horschdware
      
Beiträge: 744
Erhaltene Danke: 54
Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
|
Verfasst: Fr 30.09.11 15:11
Nein, storestore. Das würde ich hier nicht tun.
Eine Exception ist ja eine "Ausnahme", quasi ein nicht vorhergesehenes Ereignis.
Die Eingabe eines falschen Zeichens ist aber vorhersehbar und lässt sich vorher abfangen.
Achtung Autovergleich:
Wenn ein Kind auf die Straße rennt, dann fährst du ja auch nicht einfach drüber und setzt dich dann nach Kuba ab (Exception) sondern leitest frühzeitig Gegenmaßnahmen ein (bremsen!!).
Bei der Programmierung läuft das genauso.
Vor der Typumwandlung prüft man, ob die Eingabe einen brauchbaren Wert hat.
Hier wären das Zahlen.
Man könnte jetzt entweder prüfen, ob die Eingabe ein Buchstabe ist und falls ja rausspringen. Da müsste man im schlimmsten Fall prüfen auf a, b, c, .... A,B,C,... /()=!? usw....
Oder man prüft, ob die Eingabe eine Zahl ist (0..9).
Wenn ja: Weitermachen. Wenn nein, raus.
(Ich bin kein Experte für C#, aber zumindest in anderen Sprachen gibt es gelegentlich Methoden Marke StrToIntDef(s, i), welche eine Umwandlung versucht und im Fehlerfall einen Standardwert setzt. Vllt gibt's so etwas auch in C#? Google / Forensuche?)
_________________ Delphi: XE - OS: Windows 7 Professional x64
|
|
Th69
      

Beiträge: 4805
Erhaltene Danke: 1061
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Fr 30.09.11 15:39
Hallo zusammen,
ja dafür gibt es die statische TryParse-Methode.
|
|
Horschdware
      
Beiträge: 744
Erhaltene Danke: 54
Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
|
Verfasst: Fr 30.09.11 16:25
Ach ja, ich bin mal eben fies
Was macht denn dein Programm, wenn du erst eine 1, dann ein "/" und dann eine 0 eingibst? 
_________________ Delphi: XE - OS: Windows 7 Professional x64
|
|
pdelvo
      
Beiträge: 55
Erhaltene Danke: 11
|
Verfasst: Fr 30.09.11 17:08
failen. für sowa s braucht man einen Formel Parser. Gibts schon ne Menge fertiges zeugs. Ich je nach Funktionsumfang richtig aufwendig
|
|
Horschdware
      
Beiträge: 744
Erhaltene Danke: 54
Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
|
Verfasst: Fr 30.09.11 17:13
Mir ging es eigentlich nur um das Abfangen einer Division durch null. Im obigen Coding wird ja erst einmal jede mögliche Rechenoperation ausgeführt, dann aber nur die gewünschte Ausgegeben. Ich denke, das sollte machbar sein, nur die gewünschte Rechenoperation durchzuführen und im Fall einer Division den Null-Fall auszusondern.
Formelparser dürfte für so ein Einsteigerprojekt vielleicht ein kleines Bisschen überdimensioniert sein 
_________________ Delphi: XE - OS: Windows 7 Professional x64
|
|
|