Tengo una duda sobre excepciones con el siguiente código:
namespace cociente
{
class Program
{
static void Main(string[] args)
{
int a,b,c;
a = 0;
b = 0;
c = 0;
string tmp = null;
try
{
Console.Write("Escribe el primer número: ");
tmp = Console.ReadLine();
a = Convert.ToInt16(tmp);
Console.Write("Escribe el segundo número: ");
tmp = Console.ReadLine();
b = Convert.ToInt16(tmp);
c = a / b;
Console.Write("\nEl cociente de a/b es: " + c);
}
catch (FormatException)
{
Console.Write("El dato introducido, " + tmp + ", no es un número.");
}
catch (DivideByZeroException)
{
Console.Write("El valor de la segunda variable debe ser distinto de 0");
}
Console.ReadKey();
} // FIn del método principal
} // Fin de la clase Program
} // Fin del namespace
Si lo ejecuto introduciendo un valor de "0" a la variable "b", me respecta el catch indicando que la 2a variable debe ser distinta de 0. Pero si cambio el tipo de variables a "double", ya no me respeta el catch. Realiza la división y me arroja el resultado "El cociente de a/b es: infinito" ¿Porqué si sólo cambio el tipo de variable?
Mi código, con el cambio de tipo de variable quedaría de la siguiente forma:
static void Main(string[] args){
double a, b, c;
a = 0;
b = 0;
c = 0;
string tmp = null;
try
{
Console.Write("Escribe el primer número: ");
tmp = Console.ReadLine();
a = Convert.ToDouble(tmp);
Console.Write("Escribe el segundo número: ");
tmp = Console.ReadLine();
b = Convert.ToDouble(tmp);
c = a / b;
Console.Write("\nEl cociente de a/b es: " + c);
}
catch (FormatException)
{
Console.Write("El dato introducido, " + tmp + ", no es un número.");
}
catch (Exception)
{
Console.Write("El valor de la segunda variable debe ser distinto de 0");
}
Console.ReadKey();