System.formatexception : la chaîne d’entrée n’était pas dans un format correct

la programmation


Ce code affiche une erreur

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);
          
        }
    }
}

Mais si je commente simplement le code comme ci-dessous, cela fonctionne 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);
          
        }
    }
}

S’il vous plaît, dites-moi la raison.
Merci

Ce que j’ai essayé :

int p1 = Convert.ToInt32(Console.ReadLine().Trim());
mais il montre également la même erreur.

Solution 1

Vous saisissez un caractère et le lisez comme un int. C’est le problème. Corrige le.

Solution 2

Ce n’est pas un problème avec le code. Le problème vient de l’entrée que vous essayez d’alimenter avec cette ligne de code. Tout ce que vous tapez sur la console ne peut pas être converti en entier.

Vous voudrez peut-être plutôt vous pencher sur Int32.TryParse(). Lisez-le d’abord dans la documentation.

Solution 3

En plus des Solutions 1 et 2 :

N’utilisez pas la classe Convert quand ce n’est pas vraiment nécessaire. Il ne s’agit pas ici d’une « conversion » ; c’est analyse. Mieux vaut utiliser la méthode qui fait exactement cela, dans votre cas, int.Parseou, mieux, la méthode ne générant pas d’exception, int.TryParse:

.

-SA

Solution 4

J’ai copié votre code et je l’ai testé.
même si j’ai saisi le integer valeurs qu’il donnait les mêmes format exception..
Considérer Solution 1,2,3 pour des informations concernant Analyse des valeurs entières

le problème est que vous utilisez Console.Read() méthode

Citation:

La méthode Read bloque son retour pendant que vous tapez des caractères d’entrée ; il se termine lorsque vous appuyez sur la touche Entrée. Appuyer sur Entrée ajoute une séquence de fin de ligne dépendante de la plate-forme à votre entrée (par exemple, Windows ajoute une séquence de retour chariot-saut de ligne). Les appels suivants à la méthode Read récupèrent votre entrée caractère par caractère. Une fois le dernier caractère récupéré, Read bloque à nouveau son retour et le cycle se répète.

Référer Méthode Console.Read (Système)[^]

essayez de déboguer ce code ci-dessous

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);

        }
    }

Le Console.Read() attribuera la dernière valeur de caractère de cette ligne.
et l’immédiat Console.ReadLine() sera ignoré de l’entrée utilisateur et attribuera la valeur qui est déjà saisie à l’écran.
Par exemple:
si tu tapes “a1” puis le p1str contiendra la valeur “1” en ignorant le premier caractère
si tu tapes “123” puis le p1str contiendra la valeur “23” qui peut être analysé en entier sans exception.
si tu tapes “1[pressed enter key]” alors p1str contiendra la valeur “” (clé vide ou retour), ce qui entraînera format exception..

J’espère que vous avez compris, appliquez le point d’arrêt et le débogueur, voyez comment cela fonctionne.

Solution 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をコピーしました