Was ich suche, ist, wie man eine vom Benutzer angegebene Ganzzahl über die Befehlszeile (Konsolenprojekt) liest. Ich kenne hauptsächlich C ++ und habe den C # -Pfad eingeschlagen. Ich weiß, dass Console.ReadLine (); Nimmt nur ein Zeichen / einen String. Kurz gesagt, ich suche nach der ganzzahligen Version davon.
Nur um Ihnen eine Vorstellung davon zu geben, was ich genau mache:
Console.WriteLine("1. Add account.");
Console.WriteLine("Enter choice: ");
Console.ReadLine(); // Needs to take in int rather than string or char.
Ich habe eine ganze Weile danach gesucht. Ich habe viel auf C gefunden, aber nicht auf C #. Ich habe jedoch einen Thread auf einer anderen Site gefunden, der vorschlug, von char nach int zu konvertieren. Ich bin sicher, es muss einen direkteren Weg geben als das Konvertieren.
ReadLine
haben. Sie sollten den Rückgabewert beibehaltenstring
und versuchen, ihn inint
(möglicherweiseInt32.TryParse
oder andere ans mittry / catch
) zu konvertieren. Wenn der Eintrag nicht erfolgtint
, fordern Sie den Benutzer zu einem weiteren Versuch auf.int.TryParse
für die Konvertierung zu verwenden.Antworten:
Sie können die Zeichenfolge mit der Funktion Convert.ToInt32 () in eine Ganzzahl konvertieren
int intTemp = Convert.ToInt32(Console.ReadLine());
quelle
Ich würde vorschlagen, dass Sie verwenden
TryParse
:Console.WriteLine("1. Add account."); Console.WriteLine("Enter choice: "); string input = Console.ReadLine(); int number; Int32.TryParse(input, out number);
Auf diese Weise löst Ihre Anwendung keine Ausnahme aus, wenn Sie versuchen, etwas wie "1q" oder "23e" zu analysieren, weil jemand eine fehlerhafte Eingabe vorgenommen hat.
Int32.TryParse
Gibt einen booleschen Wert zurück, sodass Sie ihn in einerif
Anweisung verwenden können, um festzustellen, ob Sie Ihren Code verzweigen müssen oder nicht:int number; if(!Int32.TryParse(input, out number)) { //no, not able to parse, repeat, throw exception, use fallback value? }
Zu Ihrer Frage: Sie werden keine Lösung zum Lesen einer Ganzzahl finden, da
ReadLine()
die gesamte Befehlszeile gelesen wird und drei Zeichenfolgen zurückgegeben werden. Sie können versuchen, diese Eingabe in eine Variable int16 / 32/64 zu konvertieren.Hierfür gibt es verschiedene Methoden:
Wenn Sie Zweifel an der zu konvertierenden Eingabe haben, wählen Sie immer die TryParse-Methoden, unabhängig davon, ob Sie versuchen, Zeichenfolgen, int-Variablen oder was nicht zu analysieren.
Update In C # 7.0 out-Variablen können direkt dort deklariert werden, wo sie als Argument übergeben werden, sodass der obige Code wie folgt zusammengefasst werden kann:
if(Int32.TryParse(input, out int number)) { /* Yes input could be parsed and we can now use number in this code block scope */ } else { /* No, input could not be parsed to an integer */ }
Ein vollständiges Beispiel würde folgendermaßen aussehen:
class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); var foo = Console.ReadLine(); if (int.TryParse(foo, out int number1)) { Console.WriteLine($"{number1} is a number"); } else { Console.WriteLine($"{foo} is not a number"); } Console.WriteLine($"The value of the variable {nameof(number1)} is {number1}"); Console.ReadLine(); } }
Hier können Sie sehen, dass die Variable
number1
auch dann initialisiert wird, wenn die Eingabe keine Zahl ist und unabhängig davon den Wert 0 hat, sodass sie auch außerhalb des deklarierenden if-Blocks gültig istquelle
int.TrypParse
ist eine bessere Lösung. @Serv ist gut, wenn Sie if-Bedingung oder Bool-Variable für das Analyseergebnis hinzufügen. Das sollte die Verwendung von int.TryParse rechtfertigen.Sie müssen die Eingabe typisieren. Versuchen Sie Folgendes
int input = Convert.ToInt32(Console.ReadLine());
Es wird eine Ausnahme ausgelöst, wenn der Wert nicht numerisch ist.
Bearbeiten
Ich verstehe, dass das oben Genannte schnell ist. Ich möchte meine Antwort verbessern:
String input = Console.ReadLine(); int selectedOption; if(int.TryParse(input, out selectedOption)) { switch(selectedOption) { case 1: //your code here. break; case 2: //another one. break; //. and so on, default.. } } else { //print error indicating non-numeric input is unsupported or something more meaningful. }
quelle
int op = 0; string in = string.Empty; do { Console.WriteLine("enter choice"); in = Console.ReadLine(); } while (!int.TryParse(in, out op));
quelle
string.Empty
Zuordnung entfernen .Ich habe verwendet
int intTemp = Convert.ToInt32(Console.ReadLine());
und es hat gut funktioniert, hier ist mein Beispiel:int balance = 10000; int retrieve = 0; Console.Write("Hello, write the amount you want to retrieve: "); retrieve = Convert.ToInt32(Console.ReadLine());
quelle
Ich habe keine gute und vollständige Antwort auf Ihre Frage gesehen, daher werde ich ein vollständigeres Beispiel zeigen. Es gibt einige Methoden, die zeigen, wie man vom Benutzer eine Ganzzahl-Eingabe erhält, aber wann immer Sie dies tun, müssen Sie dies normalerweise auch tun
Dieses Beispiel zeigt, wie Sie vom Benutzer einen ganzzahligen Wert erhalten, der gleich oder größer als 1 ist. Wenn eine ungültige Eingabe angegeben wird, wird der Fehler abgefangen, eine Fehlermeldung angezeigt und der Benutzer aufgefordert, erneut zu versuchen, eine korrekte Eingabe vorzunehmen.
static void Main(string[] args) { int intUserInput = 0; bool validUserInput = false; while (validUserInput == false) { try { Console.Write("Please enter an integer value greater than or equal to 1: "); intUserInput = int.Parse(Console.ReadLine()); //try to parse the user input to an int variable } catch (Exception) { } //catch exception for invalid input. if (intUserInput >= 1) //check to see that the user entered int >= 1 { validUserInput = true; } else { Console.WriteLine("Invalid input. "); } }//end while Console.WriteLine("You entered " + intUserInput); Console.WriteLine("Press any key to exit "); Console.ReadKey(); }//end main
In Ihrer Frage sieht es so aus, als wollten Sie dies für Menüoptionen verwenden. Wenn Sie also eine Eingabe für die Auswahl einer Menüoption erhalten möchten, können Sie die if-Anweisung in ändern
if ( (intUserInput >= 1) && (intUserInput <= 4) )
Dies würde funktionieren, wenn der Benutzer eine Option von 1, 2, 3 oder 4 auswählen müsste.
quelle
TryParse
ist eine teure Methode zur Durchführung der BenutzereingabevalidierungBesser ist es, TryParse zu verwenden:
Int32 _userInput; if(Int32.TryParse (Console.Readline(), out _userInput) {// do the stuff on userInput}
quelle
Verwenden Sie diese einfache Zeile:
int x = int.Parse(Console.ReadLine());
quelle
static void Main(string[] args) { Console.WriteLine("Please enter a number from 1 to 10"); int counter = Convert.ToInt32(Console.ReadLine()); //Here is your variable Console.WriteLine("The numbers start from"); do { counter++; Console.Write(counter + ", "); } while (counter < 100); Console.ReadKey(); }
quelle
Versuchen Sie dies, es wird keine Ausnahme ausgelöst und der Benutzer kann es erneut versuchen:
Console.WriteLine("1. Add account."); Console.WriteLine("Enter choice: "); int choice = 0; while (!Int32.TryParse(Console.ReadLine(), out choice)) { Console.WriteLine("Wrong input! Enter choice number again:"); }
quelle
Sie könnten einfach weitermachen und versuchen:
Console.WriteLine("1. Add account."); Console.WriteLine("Enter choice: "); int choice=int.Parse(Console.ReadLine());
Das sollte für die case-Anweisung funktionieren.
Es funktioniert mit der switch-Anweisung und löst keine Ausnahme aus.
quelle