Controle de saisie

Résolu/Fermé
naruto2333 Messages postés 51 Date d'inscription vendredi 21 mars 2014 Statut Membre Dernière intervention 20 janvier 2017 - 24 avril 2014 à 17:28
naruto2333 Messages postés 51 Date d'inscription vendredi 21 mars 2014 Statut Membre Dernière intervention 20 janvier 2017 - 27 avril 2014 à 19:59
bonjour tout le monde,
je voudrai juste vous poser une question sur les controles de saisie.

Par exemple je voudrais demander à un utilisateur de saisir 5 nombre entiers.
Et lorsque l'utilisateur saisie un nombre décimal(10,55) ou une chaine de caractères(uei) je voudrai que mon programme lui envoi un message d'erreur et lui redemande de saisir le nombre erroné.
Pouvez-vous m'aider à compléter les condition du "while" et du "if" svp? En fait c juste comment tester la saisie n'est pa un caractere ou un nombre decimal. je pense meme ke le %d est faux puisque je ne veux pa de decimal mais je ne sai pa comment on fait pour un entier.
merci d'avnce.
A voir également:

3 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
24 avril 2014 à 17:36
Bonjour,

Il faut passer par fgets() et convertir via strtol().
Si tu as des soucis d'utilisation, n'hésite pas.

Cdlt,
0
naruto2333 Messages postés 51 Date d'inscription vendredi 21 mars 2014 Statut Membre Dernière intervention 20 janvier 2017 2
24 avril 2014 à 20:01
je connais pas strtol()
sinn proposez moi un exemple de code svp !
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
24 avril 2014 à 21:23
Je t'ai fait un exemple.
Tu peux le peaufiner en créant des fonctions, etc.
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    char *ptr;
    long val;
    char buffer[15];

    printf("ecrire nombre : ");
    if(fgets(buffer, sizeof buffer, stdin) != NULL) {
        char *p=strchr(buffer,'\n');

        if (p != NULL)
            *p='\0';
    }
    else {
        fputs("erreur\n",stderr);
        return EXIT_FAILURE;
    }

    val = strtol(buffer, &ptr, 10);

    if (ptr != NULL && *ptr == '\0')
        printf("nb=%ld\n", val);

    return 0;
}

Pour plus de précisions sur la fonction strtol(), je te conseille le man.
0
naruto2333 Messages postés 51 Date d'inscription vendredi 21 mars 2014 Statut Membre Dernière intervention 20 janvier 2017 2
27 avril 2014 à 03:25
merci infiniment fiddy c exactement ce que je cherche mais il me semble qu il manque #include<string.h> pour la fonction strchr.

MERCI
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
27 avril 2014 à 13:00
Oui, il faut rajouter le header string.h.
0
naruto2333 Messages postés 51 Date d'inscription vendredi 21 mars 2014 Statut Membre Dernière intervention 20 janvier 2017 2
27 avril 2014 à 18:03
j'ai remarqué que val est toujours initialisée a zero (val = 0) .
et je comprend pas pourquoi sa ? et comment la changer ?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
27 avril 2014 à 18:53
Comment ça ?
J'ai mis : long val. La variable n'est donc pas initialisée à 0.
0
naruto2333 Messages postés 51 Date d'inscription vendredi 21 mars 2014 Statut Membre Dernière intervention 20 janvier 2017 2
27 avril 2014 à 19:00
si quand je fait l execution et si je tappe entrer directement sans saisir aucunne donné ;
je trouve alors que val a pris la valeur zero "0";
0