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 :

Contrôle d'un numéro de téléphone


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 21
    Par défaut Contrôle d'un numéro de téléphone
    Bonjour !

    J'ai un ennui avec une fonction qui ne marche pas ! Elle permet de créer un numéro de téléphone tout en s'assurant que le numéro est valide. Les numéros valides ont comme caractéristiques :

    — Les caractères ne doivent être que des chiffres ;
    — Ils doivent avoir 9 chiffres ;
    — Il y a deux catégories de numéros : mobile et fixes ! les mobiles commencent soit par 77,76,70,78. Et les fixes par 33 ou 30. Voici mon code qui ne marche pas !

    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
    void ajout_tel(FILE*pt_fichier,Contact* p)
    {
    int ok = 1 ;
    do{
    printf("entrer le numero de telephone: ");
    scanf("%s",p->tel);
    fprintf(pt_fichier,"%s",p->tel);
    system("cls");
    if(strlen(p->tel)> 9) ok = 0 ; 
    if(p->tel[i]!='0' && p->tel[i]!='1' && p->tel[i]!='2' && p->tel[i]!='3' && p->tel[i]!='4' && p->tel[i]!='5' && p->tel[i]!='6' && p->tel[i]!='7' && p->tel[i]!='8' && p->tel[i]!='9')
     ok=0;
     if(p->tel[0]!= 7 && p->tel[0]!= 3) //ici on s'assure que le premier caractere du numero indique soit le type mobile ou fixe//
       ok = 0 ;
    if(p->tel[0]== 7 && (p->tel[1]!= 7  && p->tel[1]!= 6 && p->tel[1]!= 8 && p->tel[1]!= 0 ) ) ok = 0 ; //un num ki debute par 7 ne peut aller qu'qvec un '7','6','8','0'.
    if(p->tel[0]== 3 && (p->tel[1]!= 0 && p->tel[1]!= 3) ) ok = 0 ;
    }while(!ok);
    }

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Salut,

    Et qu'est ce qui ne marche pas et que souhaites-tu savoir pour le faire marcher ?

  3. #3
    Membre expérimenté Avatar de moins1
    Homme Profil pro
    Autre
    Inscrit en
    Février 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Autre
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 85
    Par défaut
    Pourquoi à certains endroits tu vérifies des caractères alors qu'à d'autres tu vérifies des entiers?

    Sinon la variable i sort de où?



    EDIT: Et qu'est-ce que vient faire FILE*pt_fichier dans les arguments de la fonctions?

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    Je trouve ton code pas très lisible et pas très bien indenté, fait aussi attention aux "nombres magiques".
    Image que tu aies 200 débuts de numéro de téléphones valides, ton code serait totalement illisible.

    Voici le pseudo-code que je te proposerais :
    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
     
    int isValide( char * numero )
    {
              static char ** debutTelValide  = {"77", "76"}; // ici tu liste les débuts de numéros de téléphones valides.
     
             // si numero n'a pas exactement 9 caractères (+ '\0' final)
                      return 0; // false
     
             for( int i = 0; i != 9 ; i++) // on parcours les 9 caractères
                     // si le caractère n'est pas un nombre (cf la fonction is_digit)
                              return 0; // false
     
     
             // On parcours chaque chaînes de caractères de debutTelValide
                     // On le compare au début du numéro de téléphone ( cf strncmp )
                     // Si la comparaison est correcte
                              return 1; // true
     
            return 0; // false
    )
    }
    Je pense qu'il sera un peu plus lisible et un peu plus simple à comprendre et te permettra de voir plus facilement où il y a une erreur si tu en a une.

    EDIT : quelques pages de man utiles
    http://man.developpez.com/man3/isalpha.3.php
    http://man.developpez.com/man3/strcmp.3.php

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 21
    Par défaut
    moins1 je devai tester des caracteres pour tout! le FILE*pt_fichier c parce que les numeros seront ecri dan un fichier! et le i je voulai tester tous les caracteres du numero

  6. #6
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 21
    Par défaut
    neckara le truc c'est que je dois repeter a l'utilisateur de saisir un numero de telephone tant que les numeros qu'il donne ne sont pas valides

  7. #7
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Voici le pseudo-code que je te proposerais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int isValide( char * numero )
    {
              static char ** debutTelValide  = {"77", "76"}; // ici tu liste les débuts de numéros de téléphones valides.
    }
    Je doute que cette écriture soit correcte, à la vue de la tripotée de warnings qu'elle génère. Ne serait-ce pas plutôt ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static const char* debutTelValide[2]  = {"77", "76"};

  8. #8
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Citation Envoyé par Bktero Voir le message
    Je doute que cette écriture soit correcte, à la vue de la tripotée de warnings qu'elle génère. Ne serait-ce pas plutôt ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static const char* debutTelValide[2]  = {"77", "76"};
    Je reconnais ne pas avoir compilé

    En fait, ce serait plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static const char* debutTelValide[]  = {"77", "76"};
    Pour permettre des débuts de tailles différentes (mais bon, après tous ces warnings, je ne suis pas très bien placé pour chipoter ).

Discussions similaires

  1. Récupérer le numéro de téléphone entrant
    Par louisss dans le forum Access
    Réponses: 23
    Dernier message: 26/07/2023, 18h21
  2. Contrôle de saisie numéro téléphone
    Par franco9 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 17/09/2012, 16h20
  3. récuperation d'un numéro de téléphone
    Par herzleid dans le forum Delphi
    Réponses: 4
    Dernier message: 17/07/2007, 09h25
  4. Identification de numéros de téléphone
    Par sfxElrick dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 17/03/2005, 18h40
  5. Insérer un numéro de téléphone
    Par Fleep dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 31/10/2004, 09h20

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