Lo que estoy buscando es cómo leer un número entero que fue dada por el usuario desde la línea de comandos (consola de proyecto). Yo principalmente saber C++ y han empezado el C# ruta. Sé que la Consola.ReadLine(); sólo toma un carácter/cadena. Así que, en breve estoy buscando la versión entero de esto.

Sólo para darles una idea de lo que estoy haciendo exactamente:

Console.WriteLine("1. Add account.");
Console.WriteLine("Enter choice: ");
Console.ReadLine(); //Needs to take in int rather than string or char.

He estado buscando bastante tiempo para esto. He encontrado un montón en C pero no en C#. Me hizo encontrar sin embargo un hilo, en otro sitio, que propuso convertir de char a int. Estoy seguro de que tiene que haber una manera más directa de la conversión.

  • Creo que no han entero de la versión de ReadLine, usted debe sostener el valor de retorno en string y tratar de convertirlo a int (puede Int32.TryParse o otros ans con try / catch), si la entrada no int, preguntar al usuario para otra prueba.
  • La mejor manera es tomar la entrada en la variable de cadena y, a continuación, utilizar int.TryParse para la conversión.
InformationsquelleAutor TomG | 2014-06-27

11 Comentarios

  1. 107

    Usted puede convertir la cadena a entero usando Convertir.ToInt32() función

    int intTemp = Convert.ToInt32(Console.ReadLine());
    • Increíble, he intentado esto antes y no funcionó. Pero sólo lo intentó de nuevo y lo hizo…Gracias Consola.WriteLine(«1. Agregar cuenta.»); La consola.WriteLine(«Introduzca opción: «); int elección = Convert.ToInt32(Console.ReadLine()); if (opción == 1) // y así sucesivamente. Esto funcionó. Se marca como respuesta.
  2. 55

    Propongo utilizar TryParse:

    Console.WriteLine("1. Add account.");
    Console.WriteLine("Enter choice: ");
    string input = Console.ReadLine();
    int number;
    Int32.TryParse(input, out number);

    De esta manera, su aplicación no se lanza una excepción si se intenta analizar algo así como «1t» o «23e», porque alguien hizo un defecto de la entrada.

    Int32.TryParse devuelve un valor booleano, por lo que puede usarlo en una if declaración, para ver si o no usted necesita para sucursal de su código:

    int number;
    if(!Int32.TryParse(input, out number))
    {
       //no, not able to parse, repeat, throw exception, use fallback value?
    }

    A tu pregunta: Usted no va a encontrar una solución para leer un número entero porque ReadLine() lee toda la línea de comandos, threfor devuelve una cadena. Lo que puedes hacer es tratar de convertir esta entrada en y int16/32/64 variable.

    Hay varios métodos para hacer esto:

    Si usted está en duda acerca de la entrada, que se va a convertir, siempre van de la TryParse métodos, no importa si se intenta analizar las cadenas, variable de tipo int o lo que no.

    Actualización
    En C# 7.0 a cabo las variables pueden ser declaradas directamente donde más se pasa como un argumento, por lo que el código anterior se podría resumir en esto:

    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 */
    }

    Un ejemplo completo sería así:

    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();
        }
    }

    Aquí usted puede ver que la variable number1 no se inicializa incluso si la entrada no es un número y tiene el valor 0, independientemente, por lo que es válido incluso fuera de la declarante si el bloque

    • Upvote. int.TrypParse es la mejor solución. @Serv será bueno si usted agregue si la condición o variable de tipo bool para analizar el resultado. Que debe justificar el uso de la int.TryParse.
    • Buena respuesta, pero toda la cosa se podría simplificar a una sola línea: if (!Int32.TryParse(Consola.ReadLine(), fuera de entrada int)){ //identificador no válido de entrada }
  3. 9

    Usted necesita para convertir la entrada. intente utilizar el siguiente

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

    Lanzará la excepción si el valor no numérico.

    Editar

    Entiendo que el anterior es uno rápido. Me gustaría mejorar mi respuesta:

    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.
    }
  4. 4
    int op = 0;
    string in = string.Empty;
    do
    {
        Console.WriteLine("enter choice");
        in = Console.ReadLine();
    } while (!int.TryParse(in, out op));
    • Esta respuesta debería estar más arriba en la lista. Es el único que maneja mal de entrada y permite al usuario volver a intentarlo sin ninguna excepción. Sólo quiero quitar el string.Empty asignación.
  5. 3

    He utilizado int intTemp = Convert.ToInt32(Console.ReadLine()); y funcionó bien, aquí está mi ejemplo:

            int balance = 10000;
            int retrieve = 0;
            Console.Write("Hello, write the amount you want to retrieve: ");
            retrieve = Convert.ToInt32(Console.ReadLine());
  6. 3

    No veo una buena y completa respuesta a su pregunta, así que voy a mostrar un ejemplo más completo. Hay algunos métodos publicado mostrando cómo llegar entero de la entrada del usuario, pero cada vez que usted hace esto usted también necesitan a menudo a

    1. validar la entrada
    2. mostrar un mensaje de error si la entrada no válida
      es dado, y
    3. bucle a través de hasta una entrada válida es dado.

    Este ejemplo muestra cómo obtener un valor entero de que el usuario que es igual o mayor que 1. Si de entrada no válido se da, se captura el error, mostrar un mensaje de error, y solicite al usuario a intentar de nuevo una entrada correcta.

    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

    En su pregunta, parece que quería usar esto para las opciones de menú. Así que si usted quería conseguir de entrada int para la elección de una opción de menú puede cambiar la instrucción if para

    if ( (intUserInput >= 1) && (intUserInput <= 4) )

    Esto iba a funcionar, si usted necesita el usuario para elegir una opción de 1, 2, 3, o 4.

  7. 2

    La mejor manera es utilizar TryParse:

    Int32 _userInput;
    if(Int32.TryParse (Console.Readline(), out _userInput) {//do the stuff on userInput}
  8. 0
    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();
    
        }
  9. 0

    Intentar esto no va a lanzar la excepción y el usuario puede volver a intentarlo:

            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:");
            }
  10. -1

    Usted puede seguir adelante y tratar de :

        Console.WriteLine("1. Add account.");
        Console.WriteLine("Enter choice: ");
        int choice=int.Parse(Console.ReadLine());

    Que debe trabajar para el caso de la declaración.

    Funciona con el interruptor de declaración y no una excepción.

Dejar respuesta

Please enter your comment!
Please enter your name here