PERMITIR AL USUARIO INGRESAR DATOS

Les voy a mostrar ahora una manera de que el usuario pueda ingresar datos. Esto es más que nada para que puedan ir probando con diferentes tipos de valores y sea un poco más fácil. Además, también está bueno cuando aprenden a programar que sus programas sean interactivos. Eso les puede dar otro tipo de “entusiasmo”. Pero tampoco se acostumbren demasiado, ya que muy probablemente la mayoría de las aplicaciones que hagan, ya sean juegos o no, no usan este tipo de ingreso de datos.

Lo primero que deberíamos hacer para que el usuario pueda ingresar un dato es algo bastante pavo, pero que siempre deberían hacer. No porque el lenguaje lo requiera, sino para que el usuario entienda. Y es… Mostrar un mensaje que indique lo que se espera, antes de que pueda ingresar el valor:

 

using System;
          
public class Program
{
  public static void Main()
  {
    //Con este comando mostramos un mensaje, como ya vimos.
    Console.WriteLine("Ingrese un número: ");
    
    //Este comando espera a que el usuario ingrese un dato
    //y presione ENTER.
    Console.ReadLine();
  }
}

 

Prueben escribir este código, y vean cómo el programa queda a la espera de que ingresen un dato. Si usan https://dotnetfiddle.net/ tienen que hacer click en la consola donde salen los resultados del programa (abajo), para hacerle foco para poder ingresar un dato. Prueben!

Vean que el programa termina de ejecutarse, pero no hace nada con ese dato. Como lo que ingresa el usuario siempre se guarda en formato texto, podríamos guardarlo en una variable de ese tipo y después mostrarlo. Recuerdan qué tipo era?

 

using System;
          
public class Program
{
  public static void Main()
  {
    string loQueIngresoElUsuario;
    
    //Con este comando mostramos un mensaje, como ya vimos.
    Console.WriteLine("Ingrese un número: ");
    
    //Este comando espera a que el usuario ingrese un dato
    //y presione ENTER.
    loQueIngresoElUsuario = Console.ReadLine();
    
    Console.WriteLine("El usuario ingresó: " + loQueIngresoElUsuario);
  }
}

 

Y con esto podemos almacenar en una variable lo que sea que el usuario haya ingresado! Pero… (siempre hay peros)… El “problema” que tenemos es que el comando “Console.ReadLine()” obtiene una cadena de texto (string), como tipo de dato. O sea que si yo lo quiero guardar en una variable numérica, el compilador va a tirar un error diciendo que no puede convertir texto en número. Prueben esto y vean (para ir familiarizándose con los errores):

 

using System;
          
public class Program
{
  public static void Main()
  {
    int variableNumerica;
    
    //Con este comando mostramos un mensaje, como ya vimos.
    Console.WriteLine("Ingrese un número: ");
    
    //Este comando espera a que el usuario ingrese un dato
    //y presione ENTER.
    variableNumerica = Console.ReadLine();
    
    Console.WriteLine("El usuario ingresó: " + variableNumerica);
  }
}

 

El error diría más o menos algo como esto:

Cannot implicity convert ‘string’ type to ‘int’.

O sea…

No se puede convertir de “string” (texto) a “int” (entero).

Compilador:

 

Entonces, lo que tenemos que hacer antes de poder almacenar el valor ingresado en la variable numérica es convertirlo al tipo de valor correcto. Para eso, podemos ejecutar un comando llamado “Parse()“, que se encuentra dentro de algunos tipos de datos. Por ejemplo:

 

using System;
          
public class Program
{
  public static void Main()
  {
    int variableNumerica;
    
    //Con este comando mostramos un mensaje, como ya vimos.
    Console.WriteLine("Ingrese un número: ");
    
    //Este comando espera a que el usuario ingrese un dato
    //y presione ENTER.
    variableNumerica = int.Parse(Console.ReadLine());
    
    Console.WriteLine("El usuario ingresó: " + variableNumerica);
  }
}

 

De esta manera, tendremos 3 acciones en esa línea de código:

  • Ingresar el dato.
  • Convertirlo.
  • Almacenarlo en la variable.

Tengan en cuenta que si el valor no se puede convertir, el programa lanzará un error.

 

EJERCITACIÓN:

Hagan un programa que pida al usuario ingresar dos números, que pueden ser con coma, y luego los sume y muestre su resultado.

 

Como dato adicional, tengan en cuenta que al sumar dos valores con el operador de suma, el tipo de dato resultante puede variar dependiendo de qué operandos estén utilizando. Por ejemplo:

  • int + int = int
  • float + float = float
  • float + int = float
  • string + int = string
  • string + float = string

Mayoritariamente, siempre que usen un “string” con lo que sea, el resultado va a ser otro “string“. Pero… Tengan en cuenta lo siguiente, y que es muy importante: Como puse arriba: int + int = int. Y esto mismo se aplica al resto de los operadores. Les voy a escribir un programa, y antes de probarlo léanlo y respondanse a ustedes mismos cuál será el resultado que el programa mostrará. Prueben ingresando como primer número el 9 y como segundo el 2. Ustedes saben el resultado matemático, pero vean qué hace el programa.

 

using System;
          
public class Program
{
  public static void Main()
  {
    int num1;
    int num2;
    int result;
    
    Console.WriteLine("Ingrese un número: ");
    num1 = int.Parse(Console.ReadLine());
    
    Console.WriteLine("Ingrese otro número: ");
    num2 = int.Parse(Console.ReadLine());
    
    result = num1 / num2;
    
    Console.WriteLine("El resultado es: " + result);
  }
}

 

¿Qué fue lo que pasó? ¿Qué piensan ustedes que podría haber “pensado” el programa al momento de generar ese resultado?

Lo que pasa es que para el programa son dos número enteros. Por ende, la operación entre dos números enteros, para el programa, va a generar otro objeto del mismo tipo. No importa qué cosa divida, multiplique, sume, etc… SIEMPRE el programa generará un resultado del mismo tipo de dato, SI AMBOS OPERANDOS SON DEL MISMO TIPO. Tenganlo en cuenta más que nada al momento de obtener resultados equívocos.

Entonces… ¿Qué hago para que me de valores correctos? Bueno… Piensen siempre en los posibles tipos de resultados que pueden obtener. Si van a hacer divisiones, es muy probable que los dos valores generen números con coma. De esta manera, lo “ideal” sería usar para este tipo de operación dos valores de tipo “float“.

Por supuesto hay muchas más cosas que podemos hablar al respecto de variables, pero por el momento sólo con eso será más que suficiente para arrancar.