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 :

Faire des contrôles lors d'une saisie


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 11
    Points : 8
    Points
    8
    Par défaut Faire des contrôles lors d'une saisie
    je voudrais savoir comment faire pour contrôler la saisie des données en C (contrôler pour que les données soient entières) , je fais référence en Pascal où on utilise la procédure ioresult pour contrôler la saisie des entier par exemple.

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 720
    Points : 31 037
    Points
    31 037
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Roland2007 Voir le message
    je voudrais savoir comment faire pour contrôler la saisie desdonnées en C (contrôler pour que les données soivent entières) , je fais reference en pasacal où on utilise la procedure ioresult pour contrôler la saisie des entier parexples.
    Que les données "soivent" ???
    Bon ben pour controler qu'une donnée soive entière, faut utiliser le retour de scanf car il te retourne le nb d'éléments réellement traités

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    char saisie[1024];
    int nb;
     
    while (1)
    {
        printf("Entrez un nombre :");
        fgets(saisie, 1024, stdin);
        if (sscanf(saisie, "%d", &nb) == 1)
            break;
        printf("Saisie invalide => try again !!!\n");
    }
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 11
    Points : 8
    Points
    8
    Par défaut controle à la saisie
    Bonsoir Sve@r, vos codes la ne font pas vraiment ce que je cherche car on sort de la boucle quand c'est pas un entier n'est pas saisie.
    par exple en pascal on peut écrire
    Var N:integr;
    Repeat
    {$i-}Read(N);{$i+}
    Until (IOresult=0);
    On sortira de la boucle que si un entier est saisie.
    J'ai trouve un code qui fait ce travail, mais avant de le mettre en ligne je doit le commenter.
    merci pour votre code et je vous demande de commanter un peu prochaine vos codes.

  4. #4
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Moi je dirais plutôt fgets + strtol
    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
        char s[10];
        int n, ok;
     
        ok = 0; /* ok = FAUX */
     
        do
        {
            char * p_stop;
     
            /* saisir une chaine */
     
            printf("Entrez un entier : ");
            fflush(stdout);
            fgets(s, sizeof(s), stdin);
     
            /* Convertir s en int */
     
            n = (int)strtol(s, &p_stop, 10);
     
            /* Tester si la conversion s'est bien passee */
     
            if (*p_stop == '\n' || *p_stop == '\0')
                ok = 1; /* ok = VRAI */
            else
                printf("'%c' n'est pas un caractere valide. Recommencez.\n", *p_stop);
     
        }
        while ( !ok );
     
        printf("Vous avez entre %d\n", n);
     
        return 0;
    }

  5. #5
    Membre régulier Avatar de nicodn02
    Profil pro
    Consultant .NET
    Inscrit en
    Mars 2007
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant .NET

    Informations forums :
    Inscription : Mars 2007
    Messages : 263
    Points : 97
    Points
    97
    Par défaut
    En effet ...
    Sur un fgets, il ne faudrait pas tester si tout est ok? C'est à dire rechercher le '\n' ou sinon vider le buffer ?

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Roland2007 Voir le message
    je voudrais savoir comment faire pour contrôler la saisie des données en C (contrôler pour que les données soient entières) , je fais référence en Pascal où on utilise la procédure ioresult pour contrôler la saisie des entier par exemple.
    fgets() + scanf(). Tu vérifies le code retour de sscanf(). Il n'est pas inutile de lire la doc des fonctions.
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Roland2007 Voir le message
    Bonsoir Sve@r, vos codes la ne font pas vraiment ce que je cherche car on sort de la boucle quand c'est pas un entier n'est pas saisie.
    Euh, tu as testé ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Entrez un nombre :aaa
    Saisie invalide => try again !!!
    Entrez un nombre :12
     
    Press ENTER to continue.
    C'est quoi le problème ?
    Pas de Wi-Fi à la maison : CPL

Discussions similaires

  1. Que faire des index lors d'un changement de type d'une colonne ?
    Par Kropernic dans le forum Administration
    Réponses: 2
    Dernier message: 12/12/2012, 11h24
  2. faire des contrôles de saisie d'un champ textarea
    Par yawra dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 07/04/2012, 18h30
  3. [VRML] Faire des trous ronds dans une table.
    Par yoyo910 dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 22/03/2006, 17h56
  4. Réponses: 1
    Dernier message: 03/02/2006, 12h35
  5. [BDE] Echec de contrôle lors d'une insertion
    Par rbag dans le forum Bases de données
    Réponses: 2
    Dernier message: 26/11/2004, 09h57

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