web-dev-qa-db-de.com

Lesen einer Ganzzahl aus der Benutzereingabe

Was ich suche, ist, wie man eine Ganzzahl liest, die der Benutzer von der Kommandozeile (Konsolenprojekt) aus gegeben hat. Ich kenne hauptsächlich C++ und habe den C # -Pfad gestartet. Ich kenne diese Console.ReadLine (); nimmt nur ein Zeichen/einen String. Kurz gesagt, ich suche die ganzzahlige 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.

Dafür habe ich schon lange gesucht. Ich habe viel auf C gefunden, aber nicht auf C #. Ich fand jedoch einen Thread auf einer anderen Site, der vorschlug, von char in int zu konvertieren. Ich bin sicher, es muss einen direkteren Weg geben als das Konvertieren. 

55
TomG

Sie können den String mit der Funktion Convert.ToInt32 () in eine Ganzzahl konvertieren

int intTemp = Convert.ToInt32(Console.ReadLine());
85
CodingDefined

Ich würde vorschlagen, dass Sie TryParse verwenden:

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 gemacht hat.

Int32.TryParse gibt einen booleschen Wert zurück, sodass Sie ihn in einer if-Anweisung verwenden können, um zu sehen, 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 finden, um eine ganze Zahl zu lesen, da ReadLine() die gesamte Befehlszeile liest. Daraufhin wird eine Zeichenfolge zurückgegeben. Versuchen Sie, diese Eingabe in eine int16/32/64-Variable umzuwandeln.

Dafür gibt es mehrere Methoden:

Wenn Sie Zweifel an der Eingabe haben, die konvertiert werden soll, sollten Sie immer die TryParse-Methoden verwenden, unabhängig davon, ob Sie Zeichenfolgen, int-Variablen oder was auch immer analysieren.

Update In C # 7.0 können Out-Variablen direkt dort deklariert werden, wo sie als Argument übergeben werden. Der obige Code könnte also hier zusammengefasst werden:

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 so 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. Sie gilt also auch außerhalb des deklarierenden if-Blocks

41
Marco

Sie müssen die Eingabe typisieren. versuchen Sie es mit folgendem 

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

Es wird eine Ausnahme ausgelöst, wenn der Wert nicht numerisch ist.

Bearbeiten

Ich verstehe, dass das Obige 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.
}
8
Kajal Sinha
int op = 0;
string in = string.Empty;
do
{
    Console.WriteLine("enter choice");
    in = Console.ReadLine();
} while (!int.TryParse(in, out op));
3
font

Ich habe int intTemp = Convert.ToInt32(Console.ReadLine()); benutzt 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());
3
yagohaw

Ich habe keine gute und vollständige Antwort auf Ihre Frage gesehen, deshalb werde ich ein vollständigeres Beispiel zeigen. Es gibt einige Methoden, die zeigen, wie man Ganzzahl-Eingaben vom Benutzer erhält, aber wenn Sie dies tun, müssen Sie dies normalerweise auch tun 

  1. bestätigen Sie die Eingabe 
  2. zeigt eine Fehlermeldung an, wenn ungültige Eingabe angegeben wurde, und 
  3. schleife durchlaufen, bis eine gültige Eingabe erfolgt.

In diesem Beispiel wird gezeigt, wie ein ganzzahliger Wert vom Benutzer abgerufen wird, der gleich oder größer als 1 ist. Wenn eine ungültige Eingabe eingegeben wird, wird der Fehler abgefangen, eine Fehlermeldung angezeigt und der Benutzer wird aufgefordert, erneut eine korrekte Eingabe zu versuchen.

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 Int-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 die Option 1, 2, 3 oder 4 auswählen muss.

2
technoman23

Besser ist es, TryParse zu verwenden:

Int32 _userInput;
if(Int32.TryParse (Console.Readline(), out _userInput) {// do the stuff on userInput}
2
Alexander Bell

Verwenden Sie diese einfache Zeile:

int x = int.parse(console.readline());
1
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();

    }
0
kunleth