C sharp - Operacion introducida por el usuario devuelve error Input string was not in a correct format

 
Vista:
Imágen de perfil de Isaak
Val: 9
Ha aumentado su posición en 2 puestos en C sharp (en relación al último mes)
Gráfica de C sharp

Operacion introducida por el usuario devuelve error Input string was not in a correct format

Publicado por Isaak (5 intervenciones) el 04/05/2019 20:55:22
Hola a todos, os dejo aqui un pequeño codigo a ver si alguien me puede decir donde falla.
La cuestion es que al introducir los caracteres numericos funciona a la perfeccion pero cuando le trato de meter el operador(o cualquier otro caracter que no sea un digito), el programa crashea.
He llegado a la conclusion de que el programa trata de convertir a int o double el caracter, pero no se exactamente por que pasa o que linea del codigo es la que crea el conflicto, asi que si alguien me echa una mano le estaria muy agradecido.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
string operacion;
int longitud;
string primerNumSTR;
double primerNum;
string segundoNumSTR;
double segundoNum;
string operador;
 
Console.WriteLine("Introduce una operacion.");
operacion = Console.ReadLine().ToLower();
longitud = operacion.Length;
//operacion.Substring(0, longitud);
 
 
for (int i = 0; i < longitud; i++)
{
    string digito = operacion.Substring(i, 1);
 
 
 
    if (Char.IsDigit(Convert.ToChar(digito)))
    {
 
 
    }
    else
    {
 
        operador = digito;
        primerNumSTR = (operacion.Substring(0, Convert.ToInt32(operador)));
        primerNum = Convert.ToDouble(primerNumSTR);
        segundoNumSTR = (operacion.Substring(Convert.ToInt32(operador), operacion.Length));
        segundoNum = Convert.ToDouble(segundoNumSTR);
        if (operador == "x")
        {
            double multi = primerNum * segundoNum;
        }
        else if (operador == "-")
        {
 
        }
        else if (operador == "+")
        {
            Console.WriteLine("Tu operacion es una suma");
 
        }
        else if (operador == "/")
        {
            Console.WriteLine("Tu operacion es una division");
 
        }
    }
 
}

Gracias de antemano y saludos :)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Operacion introducida por el usuario devuelve error Input string was not in a correct format

Publicado por Emiliano (4 intervenciones) el 05/05/2019 03:52:51
Esta mal tu lógica...

La línea:

if (Char.IsDigit(Convert.ToChar(digito)))

Debería ser así:

if (!Char.IsDigit(Convert.ToChar(digito)))

Si analizas bien la lógica estas tratando de convertir a número un caracter que quizás no sea numerico... en el else...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Isaak
Val: 9
Ha aumentado su posición en 2 puestos en C sharp (en relación al último mes)
Gráfica de C sharp

Operacion introducida por el usuario devuelve error Input string was not in a correct format

Publicado por Isaak (5 intervenciones) el 05/05/2019 04:24:05
Si lees bien el código en realidad no está mal, puesto que si el programa reconoce la variable dígito cómo un valor númerico no hace nada. Sin embargo, si te fijas en el else, si NO reconoce la variable dígito cómo un valor númerico, entonces si la almacena, que es lo que yo pretendía hacer.
De todas formas, el nombre de la variable está mal declarado puesto que he estado haciendo muchas ediciones de código y cambiando muchos de los parámetros. Se me ha pasado cambiarlo por algo mas descriptivo.

CÓDIGO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
string operacion;
            int longitud;
            string primerNumSTR;
            double primerNum;
            string segundoNumSTR;
            double segundoNum;
            string operador;
 
 
            Console.WriteLine("Introduce una operacion.");
            operacion = Console.ReadLine().ToLower();
            longitud = Convert.ToInt32(operacion.Length);
            //operacion.Substring(0, longitud);
 
 
            for (int i = 0; i < longitud; i++)
            {
                string digito = operacion.Substring(i, 1);
 
 
 
 
 
 
                if (Char.IsDigit(Convert.ToChar(digito)))
                {
 
 
                }
                else
                {
 
                    operador = digito;
 
                    if (operador == "x")
                    {
                        Console.WriteLine("Tu operacion es una Multiplicacion.");
                        int posicion = operacion.IndexOf("x");
 
                        primerNumSTR = operacion.Substring(0, posicion);
                        primerNum = Convert.ToDouble(primerNumSTR);
                        segundoNumSTR = operacion.Substring(posicion + 1);
                        segundoNum = Convert.ToDouble(segundoNumSTR);
                        double multi = primerNum * segundoNum;
                        Console.WriteLine("El resultado de tu multiplicacion es " + multi);
 
                    }
                    else if (operador == "-")
                    {
                        Console.WriteLine("Tu operacion es una resta.");
                        int posicion = operacion.IndexOf("-");
 
                        primerNumSTR = operacion.Substring(0, posicion);
                        primerNum = Convert.ToDouble(primerNumSTR);
                        segundoNumSTR = operacion.Substring(posicion + 1);
                        segundoNum = Convert.ToDouble(segundoNumSTR);
                        double resta = primerNum - segundoNum;
                        Console.WriteLine("El resultado de tu resta es " + resta);
                    }
                    else if (operador == "+")
                    {
                        Console.WriteLine("Tu operacion es una suma.");
                        int posicion = operacion.IndexOf("+");
 
                        primerNumSTR = operacion.Substring(0, posicion);
                        primerNum = Convert.ToDouble(primerNumSTR);
                        segundoNumSTR = operacion.Substring(posicion + 1);
                        segundoNum = Convert.ToDouble(segundoNumSTR);
                        double suma = primerNum + segundoNum;
                        Console.WriteLine("El resultado de tu suma es " + suma);
 
                    }
                    else if (operador == "/")
                    {
                        Console.WriteLine("Tu operacion es una division.");
 
                        int posicion = operacion.IndexOf("/");
 
                        primerNumSTR = operacion.Substring(0, posicion);
                        primerNum = Convert.ToDouble(primerNumSTR);
                        segundoNumSTR = operacion.Substring(posicion + 1);
                        segundoNum = Convert.ToDouble(segundoNumSTR);
                        double division = primerNum / segundoNum;
                        Console.WriteLine("El resultado de tu division es " + division);
                    }
                }
 
            }

Prueba a ejecutarlo y ya veras cómo funciona a la perfección.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Operacion introducida por el usuario devuelve error Input string was not in a correct format

Publicado por Emiliano (4 intervenciones) el 05/05/2019 04:29:31
En tu primer posteo.. veo lo siguiente:

if (Char.IsDigit(Convert.ToChar(digito)))
{


}
else
{

operador = digito;
primerNumSTR = (operacion.Substring(0, Convert.ToInt32(operador)));

El código que posteaste ahora es distinto a lo que has posteado al principio....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaak
Val: 9
Ha aumentado su posición en 2 puestos en C sharp (en relación al último mes)
Gráfica de C sharp

Operacion introducida por el usuario devuelve error Input string was not in a correct format

Publicado por Isaak (5 intervenciones) el 05/05/2019 04:36:28
Exacto, el código es diferente puesto que ya he encontrado la manera de solucionar el problema que planteaba. De todas maneras, el planteamiento a la hora de asignar un valor a la variable operador es el mismo en ambos casos, te invito a que lo compruebes por ti mismo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaak
Val: 9
Ha aumentado su posición en 2 puestos en C sharp (en relación al último mes)
Gráfica de C sharp

Operacion introducida por el usuario devuelve error Input string was not in a correct format

Publicado por Isaak (5 intervenciones) el 05/05/2019 04:30:31
Código corregido y funcionando a la perfección. Si a alguien le interesa ver cómo lo he solucionado puede echar un vistao en comentarios.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar