9
votes

Comment puis-je valider l'entrée de la console sous forme d'entiers?

J'ai écrit mes codes et je tiens à le valider dans telle manière que cela ne permettra que les intergers d'être entrés et non des alphabets. Voici le code, s'il vous plaît, je t'aimerai de m'aider. Merci.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace minimum
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = Convert.ToInt32(Console.ReadLine());
            int b = Convert.ToInt32(Console.ReadLine());
            int c = Convert.ToInt32(Console.ReadLine());

            if (a < b)
            {
                if (a < c)
                {
                    Console.WriteLine(a + "is the minimum number");
                }
            }
            if (b < a)
            {
                if (b < c)
                {
                    Console.WriteLine(b + "is the minimum number");
                }
            }
            if (c < a)
            {
                if (c < b)
                {
                    Console.WriteLine(c + "is the minimum number");
                }
            }


            Console.ReadLine();
        }
    }
}


0 commentaires

10 Réponses :


16
votes

Vous devez tester si c'est un int au lieu de convertir tout de suite. Essayez quelque chose comme: xxx


0 commentaires

10
votes

appelez simplement readline () et boucle avec int.tryparse jusqu'à ce que l'utilisateur entrait un numéro valide :) xxx

espère que vous aide


0 commentaires

1
votes

Ne convertissez pas l'entrée de l'utilisateur immédiatement. Mettez-le dans une chaîne et utilisez INT32.TRYPARSE (...) pour savoir si un nombre a été saisi ou non. Comme ceci: xxx


1 commentaires

Wow est-ce qu'un enregistrement ayant toutes ces solutions jeté en même temps? Devrions-nous les supprimer?



1
votes

Notez que xxx

est équivalent à xxx

et que cette dernière forme introduit moins de nidification et est plus lisible, en particulier si votre Le code grandit plus complexe. En outre, vous devriez probablement NE JAMAIS UTILISER CONTERT.TOINT32 - Il possède un boîtier de coin particulièrement mal conçu et surprenant; Et c'est aussi moins de sécurité que int.parse qui est le choix supérieur dans la mesure du possible - ou int.tryparse lorsque vous n'êtes pas sûr de savoir si la chaîne est valide. Fondamentalement, évitez convert .... dans la mesure du possible.


0 commentaires

0
votes

Ma solution préférée serait: xxx

Bien sûr, en fonction de la spécification (si un nombre non valide est réessayé?), il peut être nécessaire d'être modifié. >


1 commentaires

Le code? un puzzle? Hmm, ce n'est pas bon :-) - J'avais l'intention de faire la composition des fonctionnalités et d'éviter les grandes fonctions - je suppose que la fonction génératrice prend un peu d'habitude de s'habituer à ...



9
votes

Pour obtenir la console pour filtrer les frappes alphabétiques, vous devez prendre une analyse de saisie. La méthode Console.Readkey () est fondamentale pour cela, il vous permet de renifler la clé pressée. Voici un exemple de mise en œuvre:

    static string ReadNumber() {
        var buf = new StringBuilder();
        for (; ; ) {
            var key = Console.ReadKey(true);
            if (key.Key == ConsoleKey.Enter && buf.Length > 0) {
                return buf.ToString() ;
            }
            else if (key.Key == ConsoleKey.Backspace && buf.Length > 0) {
                buf.Remove(buf.Length-1, 1);
                Console.Write("\b \b");
            }
            else if ("0123456789.-".Contains(key.KeyChar)) {
                buf.Append(key.KeyChar);
                Console.Write(key.KeyChar);
            }
            else {
                Console.Beep();
            }
        }
    }


2 commentaires

+1 Mais vous devriez probablement valider les modificateurs :-) (Ctrl, Alt ...)


C'est vrai. Appelons cela une fonctionnalité :)



0
votes

double / float:

Je viens de prolonger la réponse passante @hans (prenant soin de décimalseparator et "-"): xxx < / p>


0 commentaires

-1
votes

Essayez ce simple xxx


0 commentaires

1
votes
        string Temp;
        int tempInt,a;
        bool result=false;
        while ( result == false )
            {
            Console.Write ("\n Enter A Number : ");
            Temp = Console.ReadLine ();
            result = int.TryParse (Temp, out tempInt);
            if ( result == false )
                {
                Console.Write ("\n Please Enter Numbers Only.");
                }
            else
                {
                a=tempInt;
                break;
                }
            }

0 commentaires

0
votes
var getInput=Console.ReadLine();
    int option;        
    //validating input
        while(!int.TryParse(getInput, out option))
        {
            Console.WriteLine("Incorrect input type. Please try again");
            getInput=Console.ReadLine();
        } 

0 commentaires