IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Vérifier qu'une saisie clavier est bien un nombre


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2016
    Messages : 21
    Par défaut Vérifier qu'une saisie clavier est bien un nombre
    Bonjour à tous,

    J'essaie d'écrire un code qui vérifierai qu'une saisie clavier est bien un nombre (entier ou à virgule donc isdigit ne suffit pas). J'ai écrit cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #include <stdio.h>
    #include <string.h>
     
    int main (int argc, char** argv)
    {
     
        char chaine[6] = {0};
        double len = 0;
        int test = 0;
     
        while(test != 1)
        {
            printf("%snombre ? \n",chaine);
            scanf ("%5[0123456789.]", chaine);
            len = strlen(chaine);
     
            if (len != 0)
                {
                    printf("%s ça marche\n",chaine);
                    test = 1;
                }
            else
                {
                    printf("erreur veuillez recommencer \n");
                    scanf ("%*[^\n]");
                    getchar ();
                }
        }
    Cela fonctionne pas trop mal sauf que toute chaîne de caractère commençant par un entier est considérée comme valide. ainsi 3.a238 par exemple ne retournera pas d'erreur.

    Avez-vous une idée de comment faire (quitte à partir sur un code complètement différent) ?


    Merci.

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431

  3. #3
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2016
    Messages : 21
    Par défaut
    Je regarde cela, merci.

  4. #4
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2016
    Messages : 21
    Par défaut
    J'ai utilisé atof et j'ai "un galéré" mais je suis arrivé à faire une fonction qui donne le résultat que je souhaite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    // Fonction permettant de vérifier qu'une saisie clavier est bien un nombre
    // On limite le nombre à 5 chiffres, c'est suffisant pour un dosage
    double verificationsaisie(char nombre[5])
    {
        // testsaisie permettra de déterminer si on a bien saisi un nombre. Il vaut 5 si oui et autre chose sinon
        int i =0, testsaisie=0;
        // Dans un nombre réel il y a une virgule, on crée donc le "point" pour comparer
        char point = '.';
     
        // resultatverification sera la conversion de la string en double pour permettre les calculs
        double resultatverification;
     
        // On boucle tant que la saisie n'est pas un nombre
        while (testsaisie != 5)
        {
            // On demande à l'utilisateur la saisie et on la récupère
            printf("Entrez sa valeur :\n");
            scanf("%s", nombre);
            // On crée une boucle pour vérifier chaque caractère de la chaîne
            for (i = 0 ; i < 5 ; i++)
            {
                // Trois cas admissibles : le caractère saisie est un digit, le caractère saisi est un point, le caractère saisi est vide (saisie de moins de 5 caractères)
                if( (isdigit(nombre[i])) || (nombre[i] == point) || (nombre[i] == 0) )
                {
                    /* A décommenter en cas de soucis pour vérifier chaque caractère
                    printf("%c est admissible\n", nombre[i] ); */
     
                    // Si c'est le cas on incrémente testsaisie de 1
                    testsaisie = 1+testsaisie;
                }
                else
                {
                    /* A décommenter en cas de soucis pour vérifier chaque caractère
                    printf("%c n'est pas admissible\n", nombre[i] ); */
     
                }
            }
     
            // On vérifie la valeur de testsaisie. Si elle est différente de 5 on demande de recommencer la saisie sinon c'est que tout va bien
            if (testsaisie != 5)
            {
                printf("La valeur saisie doit être un nombre. Merci de recommencer.\n");
                testsaisie = 0;
            }
            else
            {
    //            printf("Tout va bien c'est un nombre.\n");
            }
        }
        resultatverification = atof(nombre);
        /* A décommenter en cas de soucis pour vérifier qu'on a bien un double égal à la saisie
         printf("Ca vaut %lf.\n", resultatverification);*/
        return resultatverification;
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/02/2016, 14h58
  2. Une fonction pour vérifier si une saisie est une date
    Par MasterMbg dans le forum Codes sources à télécharger
    Réponses: 10
    Dernier message: 02/10/2013, 11h18
  3. Une fonction implémentée en JAVA qui pour vérifier si une saisie est un numérique
    Par MasterMbg dans le forum Codes sources à télécharger
    Réponses: 3
    Dernier message: 24/09/2013, 14h17
  4. Vérifier qu'une chaîne n'est PAS un nombre
    Par foxbond dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 06/03/2009, 08h21
  5. Comment savoir si une impression s'est bien déroulé?
    Par Cyrilh7 dans le forum C++Builder
    Réponses: 5
    Dernier message: 19/11/2003, 20h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo