C# Problema de línea de lectura
Pregunta
Lo que quiero hacer es que cuando las personas que usan mi programa golpean Enter sin nada allí, no causa un error aquí es parte del programa:
Console.WriteLine("4.-Ya no quiero jugar >.<");
int opc = Convert.ToInt16(Console.ReadLine());
switch (opc)
{
case 1:
Console.WriteLine("omg");
break;
case 2:
Console.WriteLine("wtf");
break;
default:
Console.WriteLine("Cant do that >.>");
Console.ReadKey();
break;
etc.
}
La cosa es que estoy usando enteros, intenté hacer esto
string opc1=console.readline();
if (opc =="")
{
console.writeline("nope,try again");
}
else
{ // Brace was omitted in original - Jon
int opc = Convert.ToInt16(Console.ReadLine());
switch (opc)
blah blah.
y diferentes combinaciones de él>. <y el valor predeterminado no funciona para eso
Espero que alguien pueda ayudarme a resolverlo>.
Solución
Primero, configure su Console.ReadLine()
a una variable. Luego verifique si la variable que establece no está vacía o nula. Además, recomendaría usar el método TryParse de la clase INT16 porque devuelve verdadero o falso dependiendo de si la conversión fue exitosa.
Además, no necesita convertir su ReadLine
a un entero, porque también puedes encender cadenas. Ya que ReadLine
ya es un String
, no es necesaria la conversión. Sin embargo, si necesita enteros, intente esto:
String lineIn = Console.ReadLine();
if (!String.IsNullOrEmpty(lineIn))
{
Int16 myNum;
if (Int16.TryParse(lineIn , out myNum))
{
switch(myNum)
{
case 1:
...
default:
...
}
}
}
Otros consejos
Comprobar el Int16.TryParse
método.
Esto le permitirá salir del programa o realizar otra acción si la entrada del usuario no es un número en el rango permitido por Int16
(Negativo 32768 a través de 32767 positivo).
El código de muestra se puede encontrar en la entrada MSDN (Int16.tryParse Method).
Creo que lo que quieres es int.parse (...)
Puede considerar usar un trata de atraparlo Declaración para el manejo de errores ...
TryParse:
string str;
short val;
while(!short.TryParse(str=Console.ReadLine(), out val))
{
Console.WriteLine("Cant do that >.>");
}
Para obtener un entero, generalmente uso una función recursiva como esta
private int GetInt()
{
try
{
return int.parse(Console.Readline().Trim());
}
catch (exception e)
{
Console.WriteLine(string.format("{0} Please try again", e.message);
return GetInt();
}
}