System.formatexception: la cadena de entrada no tenía el formato correcto

programación


Este código muestra un error.

C#
System.FormatException: Input string was not in a correct format

C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("hello");
            Console.WriteLine("enter the character");
            int c = Console.Read();
            Console.WriteLine(c);

            Console.WriteLine("please enter first integer");
            int p1 = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("second");
            int p2 = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine(p1 + p2);
          
        }
    }
}

Pero si simplemente comento el código como se muestra a continuación, funciona bien:

C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //Console.WriteLine("hello");
            //Console.WriteLine("enter the character");
            //int c = Console.Read();
            //Console.WriteLine(c);

            Console.WriteLine("please enter first integer");
            int p1 = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("second");
            int p2 = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine(p1 + p2);
          
        }
    }
}

Por favor dime el motivo.
Gracias

Lo que he probado:

int p1 = Convert.ToInt32(Console.ReadLine().Trim());
pero también muestra el mismo error.

Solución 1

Estás ingresando un carácter y leyéndolo como int. Ese es el problema. Corrígelo.

Solución 2

No es un problema con el código. El problema está en la entrada que estás intentando introducir en esta línea de código. Lo que estés escribiendo en la consola no se puede convertir a un número entero.

Es posible que desees consultar Int32.TryParse() en su lugar. Léelo primero en la documentación.

Solución 3

Además de las Soluciones 1 y 2:

No uses la clase Convert cuando realmente no es necesario. Esto no es “conversión”; esto es analizando. Mejor utiliza el método que hace exactamente eso, en tu caso, int.Parseo, mejor, el método que no arroja la excepción, int.TryParse:

.

-SA

Solución 4

Copié tu código y lo probé.
aunque ingresé el integer valores que estaba dando lo mismo format exception..
Considerar Solución 1,2,3 para obtener información sobre Análisis de valores enteros

el problema es que estás usando Console.Read() método

Cita:

El método Read bloquea su retorno mientras escribe caracteres de entrada; termina cuando presiona la tecla Enter. Al presionar Enter se agrega una secuencia de terminación de línea dependiente de la plataforma a su entrada (por ejemplo, Windows agrega una secuencia de retorno de carro y avance de línea). Las llamadas posteriores al método Read recuperan su entrada un carácter a la vez. Una vez recuperado el último carácter, Read bloquea su retorno nuevamente y el ciclo se repite.

Referirse Método Console.Read (Sistema)[^]

intenta depurar este siguiente código

C#
class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("hello");
            Console.WriteLine("enter the character");
            int c = Console.Read();
            Console.WriteLine(c);

            Console.WriteLine("please enter first integer");
            string p1str = Console.ReadLine(); // this will be ignored if you use Console.Read()
            int p1 = Convert.ToInt32(p1str);
            Console.WriteLine("second");
            string p2str = Console.ReadLine();
            int p2 = Convert.ToInt32(p2str);
            Console.WriteLine(p1 + p2);

        }
    }

El Console.Read() asignará el último valor de carácter en esa línea.
y lo inmediato Console.ReadLine() será ignorado de la entrada del usuario y asigna el valor que ya está escrito en la pantalla.
Por ejemplo:
si escribes “a1” entonces el p1str mantendrá el valor “1” ignorando el primer carácter
si escribes “123” entonces el p1str mantendrá el valor “23” que se puede analizar como un número entero sin excepción.
si escribes “1[pressed enter key]” entonces p1str mantendrá el valor “” (tecla vacía o de retorno), lo que dará como resultado format exception..

Espero que hayas entendido, aplica el punto de interrupción y el depurador, observa cómo funciona.

Solución 5

Console.WriteLine("hello");
            Console.WriteLine("enter the character");
            int c = Console.Read();
            Console.WriteLine(c);
            Console.ReadLine(); //this work fine
            Console.WriteLine("please enter first integer");
            int p1 = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("second");
            int p2 = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine(p1 + p2);
        }

コメント

タイトルとURLをコピーしました