cinco puto cero, jajaja...
Recursos
Resumen
Aprende a crear un flujo de entrada por consola en C Sharp con validación robusta, mensajes amigables y manejo de excepciones. Verás cómo capturar nombre y nota para una evaluación, normalizar datos, convertir a tipos numéricos y controlar try/catch con excepciones específicas como ArgumentException y ArgumentOutOfRangeException.
¿Cómo crear un objeto por consola en C Sharp?
Para construir una evaluación desde la consola, primero se crea el objeto sin inicializar y luego se completan sus propiedades con datos validados. El foco está en dos campos: nombre (string) y nota (float).
¿Qué variables y validaciones iniciales se necesitan?
- Crear el objeto de evaluación sin inicializar.
- Pedir el nombre con Console.ReadLine.
- Validar con string.IsNullOrWhiteSpace para evitar vacío o espacios.
- Decidir si lanzar ArgumentException o mostrar mensajes y terminar el programa.
- Normalizar el nombre con toLower para mantener consistencia.
- Confirmar con un mensaje de éxito.
// Objeto de evaluación sin inicializar var newEval = new Evaluacion(); // Pedir nombre printer.WriteLine("Ingrese el nombre de la evaluación y presione Enter"); printer.PresioneEnter(); var nombre = Console.ReadLine(); if (string.IsNullOrWhiteSpace(nombre)) { // Alternativa sin excepción printer.WriteTitle("El valor nombre no puede ser vacío"); printer.WriteLine("Saliendo del programa."); return; // Alternativa con excepción: // throw new ArgumentException("El valor del nombre no puede ser vacío."); } // Normalizar y asignar newEval.nombre = nombre.ToLower(); printer.WriteLine("El nombre de la evaluación ha sido ingresado correctamente.");
¿Cómo mejorar la experiencia con mensajes del printer?
- Centraliza textos repetidos como "Presione Enter para continuar" en un método Printer.PresioneEnter.
- Usa Printer.WriteTitle y Printer.WriteLine para comunicar errores sin que el programa "reviente".
- Evita mensajes técnicos para el usuario final cuando no aportan valor.
¿Cómo convertir y validar la nota con manejo de excepciones?
La nota se captura como string, se valida vacío y luego se convierte a float. La conversión puede fallar, así que se usa try/catch para controlar errores y dar mensajes claros.
¿Cómo parsear y manejar errores con try catch?
- Capturar notaString con Console.ReadLine.
- Validar vacío con string.IsNullOrWhiteSpace.
- Convertir con float.Parse dentro de try.
- Usar un catch genérico para errores de formato y notificar: "no es un número válido".
- En la demostración, el sistema interpretó coma o punto en la nota al convertir con float.Parse.
printer.WriteLine("Ingrese la nota de la evaluación"); printer.PresioneEnter(); var notaString = Console.ReadLine(); if (string.IsNullOrWhiteSpace(notaString)) { printer.WriteTitle("El valor de la nota no puede ser vacío"); printer.WriteLine("Saliendo del programa."); return; } try { newEval.nota = float.Parse(notaString); // Validación de rango if (newEval.nota < 0 || newEval.nota > 5) { throw new ArgumentOutOfRangeException("La nota debe estar entre cero y cinco."); } printer.WriteLine("La nota de la evaluación ha sido ingresada correctamente."); } catch (ArgumentOutOfRangeException argE) { printer.WriteLine(argE.Message); printer.WriteLine("Saliendo del programa."); } catch (Exception) { printer.WriteLine("El valor de la nota no es un número válido, saliendo de la aplicación."); }
¿Cómo validar el rango permitido de la nota?
- Define el rango válido: de 0 a 5 inclusive.
- Si está fuera, lanza ArgumentOutOfRangeException con un mensaje claro.
- Usa un catch específico para esta excepción y muestra su Message.
¿Por qué el orden de los catch importa en C Sharp?
El manejo de excepciones funciona en "cascada": el sistema evalúa de arriba hacia abajo. Un catch genérico de Exception colocado primero atrapará todo y hará inalcanzables los catch específicos.
¿Qué es la captura en cascada y cómo afecta?
- Coloca primero los catch específicos como ArgumentOutOfRangeException.
- Deja el catch genérico de Exception al final para casos no previstos.
- Si pones el genérico primero, el IDE advertirá que los catch siguientes no se ejecutarán.
¿Te gustaría compartir cómo validas entradas por consola o qué mensajes usas para mejorar la experiencia de usuario?