Controle de saisie

Résolu
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.

3 réponses

  1. Contributeur
    Bonjour,

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

    Cdlt,
    0
    1. je connais pas strtol()
      sinn proposez moi un exemple de code svp !
      0
      1. Contributeur
        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
        1. 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
        2. Contributeur
          Oui, il faut rajouter le header string.h.
          0
        3. j'ai remarqué que val est toujours initialisée a zero (val = 0) .
          et je comprend pas pourquoi sa ? et comment la changer ?
          0
        4. Contributeur
          Comment ça ?
          J'ai mis : long val. La variable n'est donc pas initialisée à 0.
          0
        5. 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