Autor |
Beitrag |
CanPolat
      
Beiträge: 38
|
Verfasst: Fr 01.05.09 14:19
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
Zuletzt bearbeitet von CanPolat am Fr 01.05.09 15:49, insgesamt 1-mal bearbeitet
|
|
JüTho
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: Fr 01.05.09 15:32
Hallo und noch
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 
      
Beiträge: 38
|
Verfasst: 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
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: 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:
C#-Quelltext
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.
|
|
jaenicke
      
Beiträge: 19313
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 01.05.09 17:40
Wie das mit Zahl oder Buchstabe als Eingabe und deren Unterscheidung geht, hatte ich doch eigentlich ganz nebenbei in dem Beispiel gezeigt...
www.c-sharp-forum.de....php?p=560338#560338
|
|
CanPolat 
      
Beiträge: 38
|
Verfasst: 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
      
Beiträge: 19313
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 02.05.09 00:03
|
|
CanPolat 
      
Beiträge: 38
|
Verfasst: 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
      
Beiträge: 19313
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 38
|
Verfasst: 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
      
Beiträge: 49
Win Vista Business
C# (VS 2008 Professional)
|
Verfasst: 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.
_________________ Meine Programme sind perfekt, der Computer versteht sie bloß nicht.
|
|
CanPolat 
      
Beiträge: 38
|
Verfasst: 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
      
Beiträge: 19313
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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.
Zu TryParse und anderen Befehlen findest du in der MSDN Dokumentation aber auch etwas:
msdn.microsoft.com/d...ibrary/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
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: 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
      
Beiträge: 19313
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 02.05.09 15:08
|
|
CanPolat 
      
Beiträge: 38
|
Verfasst: Sa 02.05.09 15:58
alles schön und gut aber wenn ich zB hir:
C#-Quelltext
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
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: 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
|
|
|