Entwickler-Ecke
C# - Die Sprache - Keine strings zulassen
Ogrus - Mo 18.10.10 08:17
Titel: Keine strings zulassen
hallo zusammen,
hab erst vor kurzem begonnen Programmieren zulernen, und bin deswegen noch sehr unerfahren auf dem Gebiet. ich hoffe ihr könnt mir bei meinem Problem helfen.
Ich hab ein kleines KonsolenProgramm geschrieben, bei dem man über die tastatur Zahlen eingeben soll, und mit den Zahlen gerechnet werden sollen. Wie bekomm ich es aber hin, dass wenn man strings oder chars eingibt, die eingabe abgefangen wird, und man nochmal die Eingabe vornehmen kann ?
Yogu - Mo 18.10.10 08:27
Hallo und :welcome:!
Wenn du
Console.ReadLine verwendet, bekommst du
immer einen String, also eine Reihe von Zeichen. Deine Aufgabe ist es nun, die Zeichen als eine Dezimalzahl zu behandeln und in einen Integer umzuwandeln, mit dem du dann weiterrechnen kannst. Diese Umwandlung funktioniert natürlich nicht immer - der Fehlerfall ist das, von dem du schreibst, dass der benutzer einen String eingibt.
Für die Konvertierung kannst du die Methode
int.TryParse [
http://msdn.microsoft.com/de-de/library/f02979c7.aspx] verwenden:
C#-Quelltext
1: 2: 3: 4: 5: 6:
| int value; if (int.TryParse(eingabeString, out value)) { } else { } |
Wenn der Benutzer aufgefordert werden soll, die Eingabe zu wiederholen, musst du den Code natürlich in eine Schleife packen. Es bietet sich an, ihn in eine eigene Methode auszulagern, die direkt den Integer zurückliefert.
sheroco - Mi 27.10.10 23:27
Hallo, hab mich auch etwas mit dem Thema auseinandergesetzt, nur mein Problem ist nun das ich es nicht schaffe den Wert der Methode zurückzugeben.
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:
| class Program { static void Main(string[] args) {
ZahlEinlesen(int zahl);
}
public static int ZahlEinlesen(int zahl); { int zahl; Console.WriteLine("Zahl:");
if (int.TryParse(Console.ReadLine(), out zahl)) { Console.WriteLine("Eingabe erforgreich"); return zahl; } else { Console.WriteLine("Eingabefehler"); } } } |
Hoffe Ihr könnt mir da weiterhelfen..
Mfg sheroco
Moderiert von
Kha: Code- durch C#-Tags ersetzt
Delete - Do 28.10.10 00:31
Da hats du ihn doch: ZahlEinlesen(int zahl);. Nur, da du nichts damit machst, ihn zum Beispiel ausgeben, siehst du natürlich nichts.
jaenicke - Do 28.10.10 05:54
Allerdings ist der Rückgabewert undefiniert, wenn keine gültige Zahl eingegeben wurde. Da fehlt (im else) noch ein return mit einem Defaultwert oder eine Schleife, die läuft, bis eine gültige Zahl eingegeben wurde.
sheroco - Do 28.10.10 08:47
@Luckie ja das ist mir schon klar, nur das Programm müsste trotzdem aufgerufen werden können, oder?
...auch wenn es dann sofort wieder geschlossen wird, sobald ich eine zahl: ___ eingebe.
@jaenicke Die Methode selbst kann ja nur einen Rückgabewert besitzen,oder kann ich im else Block eine 2.Rückgabe mit
return
"falsch" machen?
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:
| class Program { static void Main(string[] args) { Console.WriteLine(ZahlEinlesen()); Console.ReadLine();
}
public static int ZahlEinlesen(int zahl); {bool y; do {
int zahl; Console.WriteLine("Zahl:");
if (int.TryParse(Console.ReadLine(), out zahl)) { return zahl; } else { y = true; } } while (y = true); }
} |
Bzw. kann ich das mit der Schleife so lösen?
Leider gefällt dem Compiler das nicht so ganz :(
huuuuuh - Do 28.10.10 09:21
du musst nach der Schleife auch noch einen Rückgabewert einbauen. Der Compiler erkennt nich, dass die Schleife wiederholt wird, bis ein gültiger Rückgabewert vorhanden ist.
Alternativ könntest du eine "Endlosschleife" bauen, indem du y rauswirfst und nur auf true abfragst (was dann ja immer true is :P). in diesem Fall wäre die "Endlosschleife" kein Problem, da das Programm bei return aus der Methode zurückspringt, also aus der "Endlosschleife" raus. Ob der Compiler das erkennt, müsstest du auspropieren.
Trashkid2000 - Do 28.10.10 09:33
Hi,
also, wenn Du der Methode eh schon einen int-Wert übergibst, was soll die Methode dann überhaupt noch machen??
Ich dachte, sie soll versuchen, einen string in einen int zu konvertieren!?
Würde das ganze so schreiben:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| private static int ZahlEinlesen() { int zahl = 0; while (!int.TryParse(Console.ReadLine(), out zahl)) Console.WriteLine("Ungültige Eingabe! Bitte wiederholen!"); return zahl; } |
Bloss mal so an Denkanstoß.
LG, Marko
sheroco - Do 28.10.10 10:02
ah, irgendwie denk ich viel zu kompliziert :(
das heißt also in deinem fall, falls er nicht parsen kann (!int.TryParse) dann gibt er die Meldung aus und beginnt wegen der while-Schleife von vorne...
ansonst gibt er halt mit return die zahl zurück?
hoffe ich hab das so richtig verstanden...
Yogu - Do 28.10.10 22:15
sheroco hat folgendes geschrieben : |
hoffe ich hab das so richtig verstanden... |
Stimmt genau, das macht der Code von
Trashkid2000 :zustimm:
sheroco hat folgendes geschrieben : |
C#-Quelltext 12:
| /* ... */ public static int ZahlEinlesen(int zahl); | |
Zwischen den Klammern einer Funktionsdeklaration stehen immer die Parameter, die der Funktion
übergeben werden. Sie müssen vom Aufrufer festgelegt und von der Methode selbst ausgelesen werden.
zahl ist in deinem Fall aber kein
Eingabeparameter, weil er ja dem Aufrufer zuerst nicht bekannt ist. Er soll ja von der Methode ermittelt werden, indem der Benutzer zu einer Eingabe aufgefordert wird. Das heißt, der Wert muss
zurückgegeben werden. Man könnte ihn auch als einen
Ausgabeparameter bezeichnen.
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!