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 :

Controler une chaine de caracteres ou d'entiers?


Sujet :

C

  1. #1
    Candidat au Club
    Inscrit en
    Septembre 2003
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Controler une chaine de caracteres ou d'entiers?
    Je fais un programme en C pour lequel je voudrais sécuriser les réponses, exemple:

    combien votre entreprise a t-elle d'employé?

    je voudrais tester la réponse et la refuser si elle comporte autre chose que des chiffres.

    autre exemple:
    Quel est votre Nom?

    idem mais cette fois la réponse sera refusée si elle comporte autre chose que des caracteres.
    Quelqu'un connait-il la fonction ou la methode qui pourrait m'aider,
    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Hi !

    A moins que je ne me trompe, je ne connais pas de fonctions dans les librairies standards C qui permettent de dire si une variable est un char, un int...
    A mon avis, le plus simple serait que tu récupères tes réponses dans un petit tableau de char (mettons char rep[3]; ) et tu utilises la fonction int x = atoi(rep); Si atoi rate, c'est que la réponse n'est pas bonne (contient des caractères autres que des nombres.
    Voilà, j'espère t'avoir aidé.

    @ +++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  3. #3
    Candidat au Club
    Inscrit en
    Septembre 2003
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Je te remercie.

  4. #4
    Membre éclairé
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Points : 742
    Points
    742
    Par défaut
    Salut

    Il existe des macros définie qui peuvent s'appliquer à 1 caractères.
    Exemples :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    isalnum(c) ;	// Vraie si c est une lettre ou un chiffre.
    isalpha(c) ;	// Vraie si c est une lettre.
    isdigit(c) ;	// Vraie si c est un chiffre.
    isascii(c) ;	// Vraie si c est un caractère ASCII valable.
    isprint(c) ;	// Vraie si c est un caractère affichable.
    Je pense que tu dois pouvoir parcourir tes chaînes et tester la présence et/ou non d'un caractère et/ou d'un chiffre.

    Voici une page qui en parle http://www.mkssoftware.com/docs/man3/isalnum.3.asp

    bye...
    - Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
    - Travailler dur n'a jamais tué personne, mais pourquoi prendre le risque (Edgar Bergen)

  5. #5
    Candidat au Club
    Inscrit en
    Septembre 2003
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Je te remercie c'est exactement ce que je recherchais! 8)

  6. #6
    Futur Membre du Club
    Inscrit en
    Septembre 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par GLDavid
    A mon avis, le plus simple serait que tu récupères tes réponses dans un petit tableau de char (mettons char rep[3]; ) et tu utilises la fonction int x = atoi(rep); Si atoi rate, c'est que la réponse n'est pas bonne (contient des caractères autres que des nombres.
    Ce principe ne marchera pas, pour vérifier si c'est des nombres, la ça peut marché, sauf si l'utilisateur à encodé 0.
    Car si tu essayes de convertir une chaine qui contient une lettre, elle renvera 0 automatiquement.

    Une autre façon, c'est de vérifier par rapport a la valeur ascii

    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    chaine = "abc123";
    if((chaine[0]>=40)&&(chaine[0]<=49))   // Je ne suis pas sur que les nombres sont dans les 40
    {
    // OK c'est un nombre
    }
    Je pense que 40 c'est les nombres et 60 les lettres minuscules, mais c'est a verifié. Ca permet aussi de vérifié majuscule et minuscule, car elle ont un codage différent.

    C'est sans doute ce que fait les macros

  7. #7
    Membre expérimenté Avatar de alexrtz
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 639
    Points : 1 359
    Points
    1 359
    Par défaut
    Salut,

    Je connaissais pas ctype et je faisais comme ça:
    Pour les nombres:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int verif_nombre(char *chaine){
    for(i=0; i<strlen(chaine); i++)
    if((chaine[i]<'0') || (chaine[i]>'9')) return 0;
    return 1;
    }
    C'est le même principe pour les lettres.
    "Je suis incapable d'expliquer ce qui se passa ensuite : je lâchai quelque chose, quelque chose à quoi je m'agrippais depuis toujours sans m'en rendre compte. Je m'enfonçais dans une obscurité chaude, moelleuse et protectrice, tandis qu'un loup montait la garde par mes propres yeux."

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

Discussions similaires

  1. conversion d'une chaine de caractere en un entier
    Par la_reine dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 13/05/2008, 18h21
  2. inserer un entier dans une chaine de caractere
    Par thonyitii dans le forum C
    Réponses: 11
    Dernier message: 02/01/2007, 22h00
  3. Extraire une valeur entiere d'une chaine de caractere
    Par Aloneghost dans le forum Débuter
    Réponses: 2
    Dernier message: 25/04/2006, 12h23
  4. [VB]Convertir une chaine de caractere en entier
    Par budylove dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 21/02/2006, 11h06
  5. Transfomer une Chaine de Caractere en Entier
    Par ThanosT dans le forum C
    Réponses: 14
    Dernier message: 05/10/2005, 19h56

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