Aplicaciones de Consola en C#

Jun 20, 2011 Programacion Tutoriales C# 31 comentarios

El principal motivo de este post, es que la mayor parte de los que leen este blog no saben como interactuar con el usuario a través de la consola (lo cual es comprensible), y no tienen una forma dinámica de probar sus códigos. Generalmente cuando nos enseñan a programar, parten de la parte de como crear métodos, la sintaxis del lenguaje, las estructuras de control (for, foreach, etc) y se pasan por alto la parte de como crear una aplicación, donde el usuario vea resultados a traves de la consola. Bueno, empecemos desde 0:

Crear una aplicación de Consola:

Para esto, deberemos ir a File->New->Project si usas Visual Studio, pero con cualquier otro IDE debe ser algo parecido. Entonces se mostrará una nueva ventana como la de la figura, seleccionamos C# en el menu izquierdo y luego como tipo de proyecto marcamos “Console Apliccation”, le ponemos un nombre al proyecto y le damos Ok. Ya estaremos listos para empezar con el código.

screenshot Aplicaciones de Consola en C#

Métodos útiles para trabajar con la consola

Para interactuar con el usuario es que existen algunos métodos básicos cuando trabajamos con la Consola. Veamos los más usados:

1- Console.WriteLine();
Escribe una nueva linea en la consola, es como presionar Enter y escribir una linea. Por ejemplo, podemos hacer:
Console.WriteLine(“Lo que quiera q salga en la consola”);
También podremos imprimir las variables de nuestro programa, para esto hay dos formas, pero veamos mejor dos ejemplos que son lo mismo:

//declaramos dos variables
string nombre = "Invitado";
int edad = 22;
//Imprimimos una linea en la consola de dos formas distintas
Console.WriteLine("Tu nombre es: "+nombre+" y tienes " + edad + " años.");
//En C# se usa el operador + para concatenar cadenas
Console.WriteLine("Tu nombre es {0} y tienes {1} años", nombre, edad);

Como ven la segunda vía es mucho más simple, solo debes recordar que el numero que está entre cochetes, es el indice del parámetro que se pasa al final del método.
2- Console.Write()
Hace casi lo mismo que Console.WriteLine() pero sin cambiar de línea, o sea… concatena el texto que le pasemos al método con lo que se haya escrito hasta ese momento en la consola.

3- Console.ReadLine()
Se usa para leer lo que el usuario escribió en la consola, y podemos guardarlo en una variable para despues usarlo en nuestro programa. No hay que pasarle ningún parámetro y el programa solo continuará cuando el usuario teclee alguna línea y presione Enter. Podemos hacer algo como esto:

Console.WriteLine("Escriba su nombre");
string nombre = Console.ReadLine();

Importante: Si lo que queremos es recoger lo que el usuario escriba como un tipo en específico, por ejemplo, un entero, deberemos usar el método estático int.Parse, por ejemplo:

int x = int.Parse(Console.ReadLine();

ya que lo que devuelve Console.ReadLine() es un string.

4-Console.ReadKey()
Este método resulta importante algunas veces, sobre todo cuando queremos darle varias opciones al usuario (a, b, c, d). Aunque se puede utilizar Console.ReadLine(). En este caso, este método lo que devuelve es un objeto de tipo ConsoleKeyInfo, y se puede utilizar de la siguiente forma, por ejemplo:

Console.WriteLine("Presiona una tecla");
ConsoleKeyInfo c = Console.ReadKey();
Console.WriteLine("Presionaste la tecla "+ c.KeyChar);

Bueno, estos son algunos de los métodos más importantes. Veamos ahora como está compuesto un proyecto de tipo consola. Lo primero que vemos es el namespace que se llama igual que el proyecto, luego vemos que hay una clase Program, la cual se llama así por defecto y dentro de esta, un método Main() con la siguiente signatura:

static void Main(string[] args)

Este es el punto de entrada de nuestra aplicación, el método se llama así por defecto y no se debe cambiar ni añadir ningún parámetro. Bueno, vamos ya a escribir un poco de código, como ejemplo, vamos a calcular la edad de un usuario pidiendole que nos diga el año de nacimiento. Para esto crearemos otro método estático (dentro de Program) que le pasaremos un año de nacimiento y calcula la edad. Veamos:

public static int DameEdad(int dia, int mes, int año)
{
     //Usamos la clase DateTime y un método estatico para restar fechas
     DateTime fecha_nacimiento = new DateTime(año, mes, dia);
     TimeSpan edad = DateTime.Now.Subtract(fecha_nacimiento);
     return (edad.Days/365);
}

Este método hace uso de la clase DateTime de .Net, que tiene muchas funcionalidades, entre ellas permite restar dos fechas, lo cual sería un algoritmo un poco pesado de programar (no es tan sencillo como restar los años). Cuando hacemos DateTime.Now, accedemos a la fecha actual que tenemos en nuestra PC, por ultimo devolvemos la cantidad de dias que han pasado entre las dos fechas y lo dividimos entre la cantidad de dias que tiene un año.

Ahora veamos como programar el método Main para interactuar con el usuario, pedirle la fecha, y encargarnos que la introduzca correctamente. El código sería algo así:

private static void Main(string[] args)
{
    //Variables que usaremos para la fecha de nacimiento
    int dia_nacimiento, mes_nacimiento, año_nacimiento=0;
 
    Console.WriteLine("Escriba su nombre");
    string nombre = Console.ReadLine();
    Console.WriteLine("Hola {0}, bienvenido a mi aplicacion!",nombre);
    Console.WriteLine("Por favor, introduce tu fecha de nacimiento:");
    //El while solo termina cuando se hace break
    while (true)
    {
        //Pedimos el dia y lo validamos
        Console.Write("Dia de nacimiento: ");
        dia_nacimiento = int.Parse(Console.ReadLine());
        if (dia_nacimiento < 1 || dia_nacimiento > 31)
             Console.WriteLine("Por favor, especifique un dia entre 1 y 31");
        else
             //Si el dia es valido, entonces pasamos a pedir el mes
             break;
    }
 
    while (true)
    {
        //Pedimos el mes y lo validamos
        Console.Write("Mes de nacimiento: ");
        mes_nacimiento = int.Parse(Console.ReadLine());
        if (mes_nacimiento < 1 || mes_nacimiento > 12)
             Console.WriteLine("Por favor, especifique un mes entre 1 y 12");
        else
             break;
    }
    while (true)
    {
        //Pedimos el año y lo validamos
        Console.Write("Año de nacimiento: ");
        año_nacimiento = int.Parse(Console.ReadLine());
        //El año no puede ser posterior a 1900 y anterior al año actual
        if (año_nacimiento < 1900 || año_nacimiento > DateTime.Now.Year)
             Console.WriteLine("Por favor, especifique un año entre 1900 y el {0}", DateTime.Now.Year);
        else
             break;
     }
     //Si llegamos aqui, es porque tenemos una fecha correcta, vamos a calcular la edad con
     //el método DameEdad() que escribimos antes
     int edad = DameEdad(dia_nacimiento, mes_nacimiento,año_nacimiento);
     Console.WriteLine(nombre+", usted tiene " + edad + " años.");
     Console.WriteLine("Presione cualquier tecla para terminar el programa");
     Console.ReadKey();
}

Por supuesto el código se puede hacer más eficiente y mucho más corto, pero quería mostrarte el uso de las funciones mencionadas antes. El código está bastante bien comentado, y espero que con las cosas que expliqué antes se entienda sin problemas. También les dejo el proyecto para que lo descarguen. Cualquier duda o aporte, en los comentarios.

Compartir:

31 comentarios

Forma parte de nuestra discusión y síguela de cerca

Me parece muy interesante el tema, te felicito. Si me permite tengo una pregunta sobre el codigo y una sugerencia.

1.El uso de los simbolos &lt y &gt no lo conozco me lo pueden explicar?

2. Sería interesante el tema Base de Datos y C#… o Windows Forms en c#.

Autor: OnlyZero | Fecha: Jun 21, 2011.

@OnyZero, los símbolos que comentas son los operadores < (menor) y >(mayor) respectivamente, hubo un problema con la codificación de caracteres, ya está corregido, y gracias por la recomendación, la tendré en cuenta

Autor: Tomy | Fecha: Jun 21, 2011.

Esta muy interesante esta pagina, estoy intentando aprender a programar en c# y bueno esto me ilustra.

Autor: fernando cardenas | Fecha: Jul 9, 2011.

buen Post…….para los que estamos comenzando en este mundo de la programación.

Autor: Ricky | Fecha: Jul 10, 2011.

[...] aquí Categoria(s): .NET, C#Tags: aplicacion, c#, consola, read, readline, write, writeline [...]

Autor: Aplicación de consola – C# | Informática, programación, noticias, tecnología … | Fecha: Oct 12, 2011.

Excelente.. muy didáctico, se agredece el tiempo y el aporte. Sobre todo para aquellos que estamos ingresando a C#…

Autor: Máximo | Fecha: Dic 8, 2011.

C# me cuesta mucho, mi duda es cuando utilizar un if else y while. Si tuvieras ejemplos de programas seria woow, necesito ayuda si no reprobaré.

Autor: hanna | Fecha: Abr 3, 2012.

y ejemplos de arreglos xfa

Autor: hanna | Fecha: Abr 3, 2012.

Una duda, como imprimo metodos?
Se que es el nombre punto pero cuando se tienen parametros se que para el string es + pero y los demas???

Autor: hanna | Fecha: Abr 7, 2012.

@hanna: el if else se utilizan para cuando quieres decidir si hacer una cosa u otra en dependencia si una condición se cumple o no, el while se utiliza para llamar instrucciones mientras se cumpla una condición, la diferencia entre uno y otro es que en el if else se verifica la condición una sola vez.

Y para imprimir métodos, haces algo como:
Console.WriteLine(Metodo()); //si no tiene parametros
Console.WriteLine(Metodo(parametro1, parametro2)); //si tiene parametros

Autor: Tomy | Fecha: Abr 12, 2012.

Gracias… De verdad es que despues de ver muchas referencias, es que veo que alguiens se toma el tiempo de dar un ejemplo básico y tan bien explicado. Estoy tratando de aprender, me gustaría recomendaciones tuyas de como seguir encontrando mas ejemplos. Necesito realizar un sistema basico de gestion para una tienda de DVD. Saludos…

Autor: Joaco | Fecha: May 3, 2012.

Me sirve de practica

Autor: Blas Gonzalez | Fecha: May 15, 2012.

hola quisiera saber como puedo elaborar un programa que introduciendo la fecha de nacimiento me diga que dia de la semana nací

Autor: Felix | Fecha: Jun 15, 2012.

Puedes ver este post que escribí hace un tiempo sobre como Calcular el día de la semana en C#, espero te sirva

Autor: Tomy | Fecha: Jun 19, 2012.

Hola mi pregunta es por que ò que le hace falta a mi código, por que cuando mando a imprimir la pantalla me pide los datos y cuando termino de llenar el formulario y quiero ver los resultados la pantalla se cierra y no me deja ver los resultados?? me hace falta alguna instruciòn que la consola al momento de dar enter se cierre??
porfitas. Gracias!!

Autor: deita | Fecha: Sep 9, 2012.

Kiero q me enseñen a programar me pueden dar su msm o face

Autor: Ronald | Fecha: Sep 17, 2012.

para q no se cierre el programa se pone la sentencia al final de Console.ReadKey();

Autor: mary | Fecha: Nov 21, 2012.

@mary, gracias por el aporte… se puede usar

 Console.ReadKey()

para que al usuario presionar una tecla se cierre la consola. Igualmente podríamos usar

 Console.ReadLine()

, en este caso tiene la misma funcionalidad.

Autor: Tomy | Fecha: Nov 22, 2012.

Una breve explicación de los parámetros args que recibe la función Main:
Me permiten enviar parámetros al ejecutar una aplicación:
miapp.exe 1 2 3
Donde, en la aplicación miapp.exe, args[0] tendrá el valor “1″, args[1] tendrá el valor “2″ y args[3] tendrá el valor “3″, todos del tipo string. Para saber cuántos parámetros se reciben, se hace un args.Lenght.

Autor: Yelinna | Fecha: Ene 16, 2013.

Se me dificulta mucho c-sharp. Me pudieras ayudar con un codigo que le pida al usuario un numero y este sea impreso con Console.WriteLine, agradezco tu tiempo.

Autor: homero | Fecha: Feb 6, 2013.

Este es facil:

Console.WriteLine("Escribe un numero");
int numero = int.Parse(Console.ReadLine());
Console.WriteLine("El numero que escribiste fue: "+numero);
Console.ReadLine();

Autor: Tomy | Fecha: Feb 21, 2013.

Hola buenas una pregunta: Como se codifica o se estructura un enter en C#?? gracias desde ya!!

Autor: Shakespear | Fecha: Mar 3, 2013.

@Shakespear, muy buena tu pregunta (si es lo que creo que estás preguntando), para saber si la tecla que el usuario presionó es Enter, puedes usar algo así en tu aplicación de consola:

 if(Console.ReadKey(true).Key != ConsoleKey.Enter){
     Console.WriteLine(la tecla enter fue presionada);
}

Autor: Tomy | Fecha: Mar 4, 2013.

Muchas gracias eso era precisamente!! mil gracias, sigue adelante hechandonos la mano. (Y)

Autor: Shakespear | Fecha: Mar 4, 2013.

Me parecio muy buen post, muy bien explicado, estoy estudiando esto justamente y me ayudo mucho, mis mas sinceras gracias, sigue asi, ayudas bastante a estudiantes como yo ;)

Autor: Armand Ferrer | Fecha: Abr 8, 2013.

muy buena la pag, para aquellos que estamos enrrando en eo mundo de la programacion, pero tengo una duda, como puedo hacer para que al finalizar mi operacion me pregunte si quiero salir del programa o seguir en este,de ante mano, muchas gracias :)

Autor: marycienta | Fecha: Jun 30, 2013.

¿Cómo puedo hacer que c# me permita trabajar en programas no con números en notación científica sino con números exactos pero muy grandes (30 ó 40 ó más dígitos)?

Autor: Arturo | Fecha: Jul 1, 2013.

hola un gusto soy nuevo en esto de programacion de c# me gustaria que pudieras explicar todas las lineas de comando me refiero al momento de elaborar un programa,poder explicar cada linea de comando de manera que sea mas entendible para nosotro los ususarios que aveces nos cuesta entenderlo Gracias!!!!

Autor: junior santamaria | Fecha: Jul 4, 2013.

@marycienta: Muy buena tu pregunta, para eso puedes hacer algo como:

Console.WriteLine("Te gustaría terminar el programa?");
Console.WriteLine("Y/N");
 
string s = Console.ReadLine();
if(s=="Y")
     this.Close();
else
   doSomething();

@Arturo: Para trabajar con enteros, lo más que existe es el long, que llega hasta 9,223,372,036,854,775,807, si necesitas más dígitos que esos tendrás q manejar los números como string, aunque estoy seguro que existen algunas clases implementadas para eso.

Autor: Tomy | Fecha: Oct 23, 2013.

Buenisima pagiina me sirvió de mucho

Autor: mane | Fecha: Nov 1, 2013.

Muchas Gracias Por Esta Aportación Me Sirvió De Mucho Donde Puedo Consultar Algunas Practicas Suyas Para Comprender Mejor El Desarrollo De La Programación Para Aplicaciones En Consola.

Autor: dIEGO | Fecha: Abr 26, 2014.

Escribe tu comentario

Requerido.

Requerido. No público.

Si tienes alguno.