Controle de saisie

Résolu
naruto2333 Messages postés 51 Date d'inscription   Statut Membre Dernière intervention   -  
naruto2333 Messages postés 51 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Contributeur Dernière intervention   1 846
 
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   Statut Membre Dernière intervention   2
 
je connais pas strtol()
sinn proposez moi un exemple de code svp !
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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   Statut Membre Dernière intervention   2
 
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   Statut Contributeur Dernière intervention   1 846
 
Oui, il faut rajouter le header string.h.
0
naruto2333 Messages postés 51 Date d'inscription   Statut Membre Dernière intervention   2
 
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   Statut Contributeur Dernière intervention   1 846
 
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   Statut Membre Dernière intervention   2
 
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