Laden...

int-Wert von der Konsole einlesen

Erstellt von sinso vor 15 Jahren Letzter Beitrag vor 15 Jahren 36.927 Views
S
sinso Themenstarter:in
7 Beiträge seit 2009
vor 15 Jahren
int-Wert von der Konsole einlesen

Ich bin ein ziemlicher Anfänger in C# und wollte eig nur mal einen Integer Wert auf der Konsole ausgeben und zwar so:

     
            int var =1;
            Console.WriteLine("{0}",var);
            Console.ReadLine();

das funktioniert auch, aber wenn ich einen int-Wert von der Konsole einlesen will, so:

  
            int var =1;
            Console.WriteLine("Bitte eine Zahl eingeben");
            var = Console.Read();
            Console.WriteLine("{0}",var);
            Console.ReadLine();
            Console.ReadLine();

dann gibt er mir nicht den eingegeben int-wert auf der Konsole aus sondern den ASCII-Wert(denke ich). Wie kann ich den eingegebenen Wert ausgeben ?

PS: Am Anfang muss ich doch var einen Wert zuweisen, da ist es dann eh egal welcher, da der Anfangswert mit der Eingabe eines neuen Wertes doch überschrieben sein sollte, oder ?

V
78 Beiträge seit 2008
vor 15 Jahren

Probiers mal mit:


int zahl = Convert.ToInt32(Console.ReadLine());

Der falsche Wert entsteht wohl durch das Console.Read().

Ich habe allerdings das Gefühl, dass Convert hier nicht die beste Lösung ist. Kennt vielleicht jemand eine bessere oder ist das so in Ordnung?

J
3.331 Beiträge seit 2006
vor 15 Jahren

Ich habe allerdings das Gefühl, dass Convert hier nicht die beste Lösung ist.

Stimmt. Was passiert, wenn jemand nur CR oder "abc" eingibt?

Kennt vielleicht jemand eine bessere oder ist das so in Ordnung?

:rtfm: **int.Parse **oder (noch besser) int.TryParse

Solche Methoden gibt es auch für double, DateTime usw. Für spezielle Eingabeformate kommen auch **ParseExact **bzw. **TryParseExact **in Frage.

Jürgen

95 Beiträge seit 2008
vor 15 Jahren

Hallo sinso

PS: Am Anfang muss ich doch var einen Wert zuweisen, da ist es dann eh egal welcher, da der Anfangswert mit der Eingabe eines neuen Wertes doch überschrieben sein sollte, oder ?

Nein, du kannst auch nur:

int var;

schreiben und dann den Wert zuweisen, bzw. es wäre auch besser/richtig so.

Gruss Thomas

Gespräch zweier Informatiker:
"Wie ist denn das Wetter bei euch?"
"Caps Lock."
"Hä?"
"Na ja, Shift ohne Ende!"

S
sinso Themenstarter:in
7 Beiträge seit 2009
vor 15 Jahren

Danke für die Antworten.

Aber wie verwende ich die Methode int.TryParse in meinem Bsp.

 int var = int.TryParse(Console.ReadLine());

funktioniert nicht, wie verwende ich diese Methode?

J
3.331 Beiträge seit 2006
vor 15 Jahren

wie verwende ich diese Methode? Wie poste ich richtig? Punkt 1.1 :rtfm:

Siehe notfalls auch Schau in die Doku! - Möglichkeiten der Informationsgewinnung

Wenn Du solche Fragen hier stellst statt selbst nachzuschlagen, machst Du Dir im Forum keine Freunde. Jürgen

V
78 Beiträge seit 2008
vor 15 Jahren

@juetho
Danke für den Hinweis

Ich denke so ists jetzt richtig.


string input = Console.ReadLine();
int zahl;
if (!int.TryParse(input, out zahl))
    Console.WriteLine("Bitte geben sie eine Zahl ein.");
 else
    Console.WriteLine(zahl.ToString());

946 Beiträge seit 2008
vor 15 Jahren

Oder mit while


int zahl;
while (!int.TryParse(Console.ReadLine(), out zahl))
    Console.WriteLine("Bitte geben sie eine Zahl ein.");
Console.WriteLine(zahl + "");

95 Beiträge seit 2008
vor 15 Jahren

Jetzt stimmts, ich würde dir aber trotzdem diese Lektüre empfehlen:

🛈

Gespräch zweier Informatiker:
"Wie ist denn das Wetter bei euch?"
"Caps Lock."
"Hä?"
"Na ja, Shift ohne Ende!"

S
sinso Themenstarter:in
7 Beiträge seit 2009
vor 15 Jahren

Ich habe es jetzt so gelöst, hoffe es stimmt ?!

int var;
            Console.WriteLine("Bitte Zahl eingeben");
            string s = Console.ReadLine();
            int.TryParse(s,out var);
            Console.WriteLine(var);
1.346 Beiträge seit 2008
vor 15 Jahren

was machst du wenn der Benutzer keine Zahl eingibt?
Dann ist var null.

PS: Lies dir ein Openbook durch.

Gruß pdelvo

946 Beiträge seit 2008
vor 15 Jahren

Diesmal war mein Freund pdelvo schneller.

Dann ist var null.

Seit wann kann ein int null sein :evil:

Ich habe es jetzt so gelöst, hoffe es stimmt ?!

Es stimmt, aber so nützt die das TryParse nix.
Du musst auf jeden Fall etwas behandeln, wenn ein Fehler passiert.

So schon eher int var = int.Parse(Console.ReadLine());.
Du solltest schon den Fall explizit behandeln. Ob mit try{}catch{} oder einer Abfrage/Schleife ist egal

1.346 Beiträge seit 2008
vor 15 Jahren

Da hab ich das falsche Wort benutzt. var ist dann nicht zugewiesen.

Gruß pdelvo

946 Beiträge seit 2008
vor 15 Jahren

var hat aber den Wert 0.
Man kann es so ganz normal verwenden
Und das finde ich nicht gut

Grüsse See Sharp

1.346 Beiträge seit 2008
vor 15 Jahren

Hab das mal getestet. Geht doch^^
Aber du solltest abfangen, ob eine falsche eingabe gemacht wurde

Gru++ß++ pdelvo

95 Beiträge seit 2008
vor 15 Jahren

Wie kann ich den eingegebenen Wert ausgeben ?

Wie ich gerade gemerkt habe ist das ganze ja gar nicht nötig, oder?!

Console.WriteLine("Geben Sie eine Zahl ein: ");
int var = Console.ReadLine();
Console.WriteLine(var.ToString());

So wie du die Frage gestellt hast brauchst du die TryParse Methode ja gar nicht.

Gruss Thomas

Gespräch zweier Informatiker:
"Wie ist denn das Wetter bei euch?"
"Caps Lock."
"Hä?"
"Na ja, Shift ohne Ende!"

95 Beiträge seit 2008
vor 15 Jahren

Andererseits stellt sich die Frage, wieso du überhaupt einen Integer deklarierst, wenn du ihn nur ausgeben willst?! Da kannst du ja gleich einen String deklarieren.
Aber für den Fall, dass du mit der Eingabe rechnen willst, kannst du auf TryParse zurückgreifen.

Gruss Thomas

Gespräch zweier Informatiker:
"Wie ist denn das Wetter bei euch?"
"Caps Lock."
"Hä?"
"Na ja, Shift ohne Ende!"

U
105 Beiträge seit 2004
vor 15 Jahren

Hallo,

du solltest du Variable vielleicht auch nicht gerade var nennen, da dass ab C# 3.0 ein Schlüsselwort ist.

946 Beiträge seit 2008
vor 15 Jahren

Kontextschlüsselwörter

Ein Kontextschlüsselwort wird verwendet, um im Code eine spezifische Bedeutung bereitzustellen. Kontextschlüsselwörter sind aber keine reservierten Wörter in C#. Einige Kontextschlüsselwörter, z. B. partial und where, haben in zwei oder mehr Kontexten besondere Bedeutungen.

Dazu gehört auch var. Das ist also völlig in Ordnung, aber besser wäre i