Entwickler-Ecke
C# - Die Sprache - consolenanwendung:zahl oder buchstabe eingabe und wiedergabe
CanPolat - Fr 01.05.09 14:19
Titel: consolenanwendung:zahl oder buchstabe eingabe und wiedergabe
ich habe mal das hier gemacht
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| double a; string b; Console.Write("zahl oder buchstabe eingeben: "); if (double.TryParse(Console.ReadLine(), out a)) { } else { b = Convert.ToString(Console.ReadLine()); }
Console.Write("{0}{1}",a,b); Console.Read(); |
aber der sagt mir das,bei der wiedergabe, die variabele "b" nicht zugewiesen ist. wo liegt mein fehler?
dann will ich noch, auch zu einen späteren zeitpunkt, dass es erkennen soll ob es nun ein string oder double ist und diesen wieder geben. also nicht bei der eingabe schon direkt wieder geben (das könnte ich ja schon^^)
PS. da ich noch ein anfänger bin, rattert bitte nicht nur die befehle runter sonder auch wo ich es einsätzen muss bitte^^ ein Beispiel währe auch nett;=)
mFG CanPolat
JüTho - Fr 01.05.09 15:32
Hallo und noch :welcome:
CanPolat hat folgendes geschrieben : |
aber der sagt mir das,bei der wiedergabe, die variabele "b" nicht zugewiesen ist. |
Wer sagt dir das? Bei der Wiedergabe? Das kann ich nicht glauben; ich bin mir ziemlich sicher, dass es sich um eine
Fehlermeldung des Compilers und nicht um einen Fehler zur Laufzeit handelt. Bitte gewöhne dir exakte Beschreibungen an.
CanPolat hat folgendes geschrieben : |
wo liegt mein fehler? |
Die Variable b wurde zunächst nur deklariert. Im else-Zweig hat sie einen Wert erhalten, aber im if-Zweig nicht. Das ist es, was der Compiler moniert.
CanPolat hat folgendes geschrieben : |
dann will ich noch, auch zu einen späteren zeitpunkt, dass es erkennen soll ob es nun ein string oder double ist und diesen wieder geben. also nicht bei der eingabe schon direkt wieder geben (das könnte ich ja schon^^) |
Wie bitte? Auch hier vermisse eine exakte Beschreibung. Das Ergebnis von ReadLine ist immer ein string, der out-Parameter von double.TryParse ist immer ein double. Wenn du den String später wieder verwenden willst, musst du dafür eine weitere Variable einführen und diese benutzen, etwa so:
C#-Quelltext
1: 2:
| string input = Console.ReadLine(); if ( double.TryParse(input, out a) ) |
Zur Unterscheidung könntest du die Variable a mit 0 (oder -1 oder double.MinValue) initialisieren.
CanPolat hat folgendes geschrieben : |
gibt es auch nen befehl für nur sonderzeichen merken/speichern? |
Nochmals: was meinst du damit? Zum "Merken" von Werten sind Variable oder Eigenschaften von Klassen vorgesehen. "Befehle" in diesem Sinne gibt es nicht; in C# gibt es Anweisungen (d.h. Zuweisungen von Werten an Variable oder Eigenschaften) und Methoden. Was für Sonderzeichen meinst du denn? Schau einmal die
Is-Methoden der
Char-Struktur an.
CanPolat hat folgendes geschrieben : |
(hoffe dass die fragen zusammengehöhren, wenn nicht, werde ich es sofort raus editieren. |
Naja, eigentlich geht das schon wieder zu weit. Aber weil die Ursachen die gleichen sind, wollte ich trotzdem antworten.
CanPolat hat folgendes geschrieben : |
PS. da ich noch ein anfänger bin, rattert bitte nicht nur die befehle runter sonder auch wo ich es einsätzen muss bitte^^ ein Beispiel währe auch nett;=) |
Ich habe den Eindruck, dass du etwas grundsätzlicher an das Lernen herangehen musst. Dir fehlen die Grundbegriffe der Programmierung, vor allem der Objekt-Orientierung. Deshalb schlage ich vor, dass du dich richtig einarbeitest. Dazu empfehle ich die
OpenBooks:
Außerdem solltest du von Anfang an die
SDK-Doku/MSDN als wichtigstes Nachschlagewerk benutzen. Vor allem der Index ist sehr hilfreich; bei den meisten Punkten gibt es Beispiele.
Gruß Jürgen
CanPolat - Fr 01.05.09 15:49
erstmal danke, auch dir, für die begrüßung^^
das mit der exakten beschreibung meiner fragen werde ich veruschen so gut wie möglich zu lösen^^ das hängt bestimmt noch damit zusammen dass ich erst gestern mit dem programm angefangen habe ( eigentlich generell mit dem programmieren xD)
das Open Book habe ich schon angefangen zu lesen aber es hat schon einige seiten zuviel und ich will einfach schneller lernen xP
zu deinen antworten: die werden mir richtig gut weiter helfen hoffe ich^^ (gehe jeztt nähmlich gleich grillen:))
JüTho hat folgendes geschrieben : |
Die Variable b wurde zunächst nur deklariert. Im else-Zweig hat sie einen Wert erhalten, aber im if-Zweig nicht. Das ist es, was der Compiler moniert.
|
das hier allerdings hast du etwas falch verstanden.
ich habe ja die variabelen a und b. ich will nur dass entweder a mit einer zahl also in double zugeordnet wird zB: 10 und "b" mit einem buchstaben zB "z". nun will ich etwas wiedergeben mir console.writline(""); und da soll nun stehen entweder die zahl "10" oder der Buchstabe "z" je nachdem was eingegeben wurde. also quasi dass die andere variable leer bleibt.
hoffe das diese beschreibung des fehlers zumindest etwas exakter war;)
das mit dem sonderzeichen nehm ich gleich raus, dazu kann ich ja später nochmal kommen XP
PS. ihr seit hir ja sehr nett und hilfsbereit *schleim*xD
JüTho - Fr 01.05.09 17:00
CanPolat hat folgendes geschrieben : |
das hier allerdings hast du etwas falch verstanden.
ich habe ja die variabelen a und b. ich will nur dass entweder a mit einer zahl also in double zugeordnet wird zB: 10 und "b" mit einem buchstaben zB "z". nun will ich etwas wiedergeben mir console.writline(""); und da soll nun stehen entweder die zahl "10" oder der Buchstabe "z" je nachdem was eingegeben wurde. also quasi dass die andere variable leer bleibt. |
Stimmt, mein Fehler, ich hatte b ebenfalls als double erwartet. Aber trotzdem gilt mein Kommentar:
JüTho hat folgendes geschrieben : |
Die Variable b wurde zunächst nur deklariert. Im else-Zweig hat sie einen Wert erhalten, aber im if-Zweig nicht. Das ist es, was der Compiler moniert. |
Im if-Zweig muss etwas eingefügt werden wie:
Ergänzend zu meinen allgemeinen Hinweisen musst du noch folgendes beachten:
- C# arbeitet mit exakten Typen. Überall dort, wo es um einen double geht, muss auch ein double benutzt werden und kein String; das gilt natürlich auch für alle anderen Typen. (Das hast du zwar richtig gemacht, aber ich vermute, dass du dir nicht aller Konsequenzen bewusst bist.)
- Bei jeder Variablen müssen der Geltungsbereich, Deklaration, Initialisierung und Wertezuweisung beachtet werden.
- NET arbeitet vollständig objektorientiert. Alles wird mit Klassen geregelt (auch Strings, lediglich double u.ä. als Strukturen); die Arbeit geht immer über Objekte und deren Methoden.
Jürgen
PS. Du musst natürlich nicht mit den OpenBooks arbeiten, sondern kannst dein Vorgehen selbst bestimmen. Wundere dich aber nicht, wenn du dann bei einfachen Sachen hängenbleibst und/oder von Helfern darauf verwiesen wirst.
PS 2. Ich hoffe, du hast viel Spaß beim Grillen.
CanPolat - Fr 01.05.09 23:44
@jeanicke: das einfügen von string und double ist ja in meinen fall kein problem(das habe ich ja meines erachtens auch ganz gut umgesetzt.^^
nur das wiedergeben eins von beider (je nachdem), das ist das problem^^also wenn ich die zahl 10 eingesetzt habe soll der mir 10 wieder geben und wenn ich z geschrieben habe soll der mir z wieder geben^^
@jürgen:ok da lag zwar der fehler mit der nicht zugewiesenen variabel, aber nu habe ich trz ein problem>.< wenn ich ne zahl eingebe läuft es prima, aber wenn in ein buchstabe eingebe gibt der mir 0 wieder. vermutlich habe ich es einfach nur falsch gesätzt>.<
hier mal das aktuelle:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| double a; string b; Console.Write("zahl oder buchstabe eingeben: "); if (double.TryParse(Console.ReadLine(), out a)) { b = String.Empty; } else { b = Convert.ToString(Console.ReadLine()); }
Console.Write("{0}{1}", a, b); Console.Read(); |
PS: ich hatte beim grillen viel spaß *angeben*
jaenicke - Sa 02.05.09 00:03
CanPolat hat folgendes geschrieben : |
nur das wiedergeben eins von beider (je nachdem), das ist das problem^^also wenn ich die zahl 10 eingesetzt habe soll der mir 10 wieder geben und wenn ich z geschrieben habe soll der mir z wieder geben^^ |
Ok, hast Recht, das ist natürlich eine riesige Änderung... :roll:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| static void Main(string[] args) { Boolean RepeatAgain = true; while (RepeatAgain) { Console.WriteLine("Gib eine Zahl oder etwas anderes ein:"); Double Value; String InputString = Console.ReadLine(); if (Double.TryParse(InputString, out Value)) Console.WriteLine("Es wurde die Zahl " + Value.ToString() + " eingegeben!"); else Console.WriteLine("Es wurde keine gültige Zahl eingegeben! Nämlich: " + InputString); Console.WriteLine("");
Console.WriteLine("Programm wiederholen? (j/n): "); RepeatAgain = Console.ReadLine().Equals("j"); Console.WriteLine(""); } } |
Du musst doch nur die Eingabe in einer Variable zwischenspeichern und entweder den konvertierten Wert oder den Eingabestring ausgeben.
CanPolat - Sa 02.05.09 00:49
ach so meinst du das^^, jetzt habe ich es auch verstanden^^ danke schon mal, aber wie kann ich die eingabe zu einen späteren zeitpunkt nochmal aufrufen? gibt es dafür auch nen oder befehl oder sowas?
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:
| static void Main(string[] args) { Boolean RepeatAgain = true; while (RepeatAgain) { Console.WriteLine("Gib eine Zahl oder etwas anderes ein:"); Double Value; String InputString = Console.ReadLine(); if (Double.TryParse(InputString, out Value)) Console.WriteLine("Es wurde die Zahl " + Value.ToString() + " eingegeben!"); else Console.WriteLine("Es wurde keine gültige Zahl eingegeben! Nämlich: " + InputString); Console.WriteLine("");
Console.WriteLine("du hast die zahl/den buchstaben " + Value.ToString() || InputString + " eingegeben"); Console.ReadLine();
Console.WriteLine("Programm wiederholen? (j/n): "); RepeatAgain = Console.ReadLine().Equals("j"); Console.WriteLine(""); } } |
mann könnte nochmal bei der if funktion eigentlich noch einen zusätzliche variabel zuornen und später mit einer erneuten if anwendung die abfragen aber vill gibt es ja was kürzeres^^
jaenicke - Sa 02.05.09 01:02
Wie wäre es, wenn du den Rückgabewert von TryParse in eine Variable zwischenspeicherst?
C#-Quelltext
1: 2: 3: 4: 5:
| Console.WriteLine("Gib eine Zahl oder etwas anderes ein:"); Double Value; String InputString = Console.ReadLine(); Boolean InputWasNumber = Double.TryParse(InputString, out Value); Console.WriteLine("Es wurde " + (InputWasNumber ? "die Zahl " : "der String ") + InputString + " eingegeben!\n"); |
CanPolat - Sa 02.05.09 11:24
PERFEKT!!!
genau das habe ich gesucht xD
DANKEEEEEEE!!!
jetzt musst du mir nurnoch eklären was die einzelnen befehle bewirken( ich will ja schließlich nicht nur wissen wenn ich das einsätze bekomme ich das, sondern wenn ich das einsätze bekomme ich das WEIL das dies und das kann^^)
"boolean" kann ja zwichen true und false unterscheiden, also 2 möglichkeiten
aber warum hast du einen "?" bei seiner variable, in der 5ten zeile?
für "tryparse" habe ich im openbook nichts finden können, kleine einführung währe auch hir net^^
der befehl "out". bei dem bin ich mir überhaupt nicht mehr sicher, dahcte zuerst "wenns nur" oder so heißt und nu denke ich irgendwie "oder" oder sowas>:<
---
danke nochmal;)
edit:
mir ist gereade eingefallen dass mann für verschiedene fragen ja neue trads aufmachen soll. wie siht es aber bei solchen volgefragen aus? die gehören ja an und für sich NOCH in dieses tread. wenns nicht erwüncht ist schneide ich die raus und mach 3 neue trads auf (was ja wiederum den server (meines erachtens) nach und nach auslasten würde:)
k-weddige - Sa 02.05.09 11:58
C#-Quelltext
1:
| Console.WriteLine("Gib eine Zahl oder etwas anderes ein:"); |
Das sollte klar sein, oder?
C#-Quelltext
1: 2:
| Double Value; String InputString = Console.ReadLine(); |
Variablendeklarationen und Einlesen der Eingabe.
C#-Quelltext
1:
| Boolean InputWasNumber = Double.TryParse(InputString, out Value); |
TryParse schreibt die geparste Zahl in den Ausgabeparameter, der mit out gekennzeichnet wird. out gibt an, dass die Variable keinen gültigen Wert haben muss, weil die Funktion den sowieso nicht anschaut, sondern da nur ein Ergebniss drin speichert. Als Rückgabewert gibt TryParse ein Boolean zurück. True, wenn InputString erfolgreich umgewandelt werden konnte, False, wenn InputString keine Zahl war.
C#-Quelltext
1:
| Console.WriteLine("Es wurde " + (InputWasNumber ? "die Zahl " : "der String ") + InputString + " eingegeben!\n"); |
Hier kommen wir zu einem interessanten Konstrukt: einem tenären Operator
(Bedingung ? "Rückgabe, wenn Bedingung zutrifft" : "Rückgabe, wenn Bedingung nicht zutrifft")
Den ganzen Ausdruck kannst du wie eine Variable in einen anderen Ausdruck einbauen ohne das Ergebniss erst zwischenspeichern zu müssen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| Boolean bedingung = True; String ausgabe; if (bedingung) ausgabe = "Text1"; else ausgabe = "Text2"; Console.WriteLine(ausgabe); |
C#-Quelltext
1: 2:
| Boolean bedingung = True; Console.WriteLine(bedingung ? "Text1" : "Text2"); |
Die beiden Codebeispiele machen genau das gleiche, aber der zweite ist deutlich kürzer.
CanPolat - Sa 02.05.09 13:52
ok alles verstanden, danke.
und noch eine frage xD: gehe ich euch GANZ bestimmt nicht auf die nerven ? XD
jaenicke - Sa 02.05.09 14:41
Nein, dich interessiert es ja auch, da ist ja alles ok. ;-)
Den Operator konntest du auch kaum finden im Internet, da hatte ich schon mit einer Rückfrage gerechnet. :mrgreen:
Zu TryParse und anderen Befehlen findest du in der MSDN Dokumentation aber auch etwas:
http://msdn.microsoft.com/de-de/library/994c0zb1.aspx
Ein Tipp dazu, bei Google kann man so etwas recht gut finden, wenn man so sucht:
Quelltext
1:
| Double.TryParse function site:msdn.microsoft.com |
(Oft findest man es auf diese Weise besser als mit der MSDN Suche, wenn man nicht weiß wo man dort schauen muss. ;-))
Kha - Sa 02.05.09 15:01
jaenicke hat folgendes geschrieben : |
Ein Tipp dazu, bei Google kann man so etwas recht gut finden, wenn man so sucht: |
Noch schneller und übersichtlicher geht es in der Offline-Hilfe von VS. Mit der Online-Doku könnte ich nicht arbeiten ;) .
jaenicke - Sa 02.05.09 15:08
Kha hat folgendes geschrieben : |
Noch schneller und übersichtlicher geht es in der Offline-Hilfe von VS. Mit der Online-Doku könnte ich nicht arbeiten ;) . |
Die habe ich gar nicht installiert. :mrgreen:
Wenn man sich an die Online-Doku gewöhnt hat, geht das damit sehr gut, aber bis ich da wusste wo was ist und die passenden Lesezeichen zum Einstieg hatte hat es lange gedauert wie ich zugeben muss. An der Stelle helfen mir auch Suchkürzel, die automatisch die eben genannten Sachen zu der Suche ergänzen.
CanPolat - Sa 02.05.09 15:58
alles schön und gut aber wenn ich zB hir:
nach tryparse suche bekomme ich als anfänger 10 weitere fragen ohne dass die alte geklärt ist :)
ich glaube ihr müsst mich wohl oder übel ne zeit lang bei solchen kleinigkeiten begleiten xP
PS: ganz neben bei: die seite hir ist einfach nur geil und vor allem die comunity.
mein lob geht an erster stelle an die macher des forums und natürlich an diese tolle Comunity. macht weiter so!!!
JüTho - Sa 02.05.09 16:09
Das ist einer der Gründe, warum ich dafür plädiere, dass du schrittweise lernst, auch wenn es dir nicht schnell genug geht. Damit lernst du die Grundlagen und kannst dann auch die Erläuterungen der Doku verstehen und umsetzen.
Ich habe (wie Kha) die Offline-Version der Doku installiert und komme über den Index sehr schnell an die gewünschten Informationen.
Jürgen
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!