Forums Rue-Montgallet.com
Rue-Montgallet.comRue-Hardware.comRue-Occasion.comRue-DVD.comRue-Jeuxvideo.comRue-AudioVideo.comRue-Telephone.comForums
S'inscrire | S'identifier |
| Recherche avancée | Aide
 
 

1 utilisateur anonyme et 10 utilisateurs inconnus

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

à l'aide programmation en c++

 
n°16997
belleange
c'est dur la prog :-(
Profil : Jeune recrue
Posté le 21-06-2006 à 16:23:54  profilanswer
 

Bonjour, j'ai éffectué un programme qui demande de saisir le numéro de sécuroité social ou insee qui contient le sex de la personne son année de naissance son mois et son département de naissance! j'ai réussit à le faire et à le faire viérifer que le 1er chiffre et bien 1 ou 2 sois monsieur ou mademoiselle mais j'arrive pas à le faire verifiver par contre que le mois le dépasse pas 12 pouvez vous m'aidez? car ce programme est bon mais il me manque juste cette étape merci beaucoup
 
 //**********type de caractère**********
  int typcar (char caracter){
             if ((caracter>=97)&&(caracter<=122))
                return(1);
             else
                   if((caracter>=48)&&(caracter<=57))
                   return(2);
                   else  
                   return(3);
  }
 //***********chiffres en nombre**********
  int chiffres_en_nombres(char*chaine,int nb_de_chiffres){
      int i,nombre;
      for(nombre=0,i=0;i<nb_de_chiffres;i++)
               nombre=nombre*10+*(chaine+i)-48;
               return (nombre);
  }
//**************************************************
int appartient_a(int mini,int maxi,int variable_a_tester)
{
        if((variable_a_tester>=mini)&&(variable_a_tester<=maxi))
            return(1);
        else
            return(0);
}
//***************************************************
  int main(int argc, char *argv[])
{
       char insee[8];
       int n;
       int bonne_frappe;
       int annee_de_naissance;
       do
       {
       printf("\n tapez vos 7 premiers chiffres de num INSEE: \n" );
        scanf(" %s", insee);
       for (bonne_frappe=1,n=0; n<7; n++){
       if (typcar(*(insee+n))!=2) bonne_frappe=0;}
       }
    while(bonne_frappe==0);
    annee_de_naissance=1900+chiffres_en_nombres((insee+1),2);
     
    if(*(insee+0)=='2')
    printf("\n bonjour Mademoiselle \n" );
    if(*(insee+0)=='1')
    printf("\n bonjour Monsieur vous avez %d ans \n",2006-annee_de_naissance);
     
         
  system("PAUSE" );  
  return 0;  
 
}
 
merci d'avance


Message édité par belleange le 21-06-2006 à 17:50:18

---------------
lyly
n°17006
jxano
Le 'x' ? C'est pour décorer.
Profil : Membre
Posté le 22-06-2006 à 13:21:35  profilanswer
 

Pour convertir des chaînes en entiers, il y a atoi() ou atol() (dans la bibliothèque <stdlib.h> ). Méthode : fabriquer un petit bout de chaîne avec les numéros à tester, puis passer le pointeur à atoi().


---------------
Miximus in lecto, fateor peccavimus hospes. Si dices quare nulla matella fuit !
n°17016
cmoila
Profil : Membre
Posté le 23-06-2006 à 17:30:12  profilanswer
 

Je corrige pas tout je te donne seulement quelques pistes :
 
1) si tu n'utilise pas les arguments d'une fonction pour eviter le warnig et aussi te rappeler que tu ne les utilises pas, tu ne leur donnes pas de nom, juste le type :
 int main(int, char**) { ...};
 
2) tu as ecrit un truc tres dangereux :
     char insee[8];
     printf("\n tapez vos 7 premiers chiffres de num INSEE: \n" );
     scanf(" %s", insee);  
 
car implicitement tu supposes que l'utilisateur va bien taper seulement 7 caractères, mais tu n'en sais rien ! il va peut etre en taper 200, et là bug !
dans la plupart des cas il ne faut pas saisir directement dans la variable (ici insee) mais dans un buffer volontairement trop grand qui ressert a chaque saisie. puis ensuite tu transferts exactement le nombre de caracteres voulu dans la variable. c'est donc toi qui maintrise l'entrée et pas l'utilisateur:
 
char Buffer[1000]; // comme cela c'est une variable global qui ne se trouve pas dans la pile, et je lui mets une majuscule  
 
main (int,char**)
{  
  char insee[8]; // remarque que le nom est mal choisi car insee = 13 chiffres
  printf("\n tapez vos 7 premiers chiffres de num INSEE: \n" );
  gets(Buffer);
  strncpy(insee, Buffer, 7);
  insee[7] = 0; // ne pas oublier pour les fonctions "str" avec zéro terminal
  ...
 
3) ensuite prends les caracteres dans "insee" un par un pour les interpréter. car les fonctions standards (type scanf) ne sont pas très adapté a des entrée non-formatées (le f voulant justement dire formaté).
pour les tester tu as par exemple la macro : isdigit(insee[2]) qui va repondre true si le 3eme caractere de issee est un chiffre.
 
ensuite tu convertis


Message édité par cmoila le 23-06-2006 à 17:53:54

Aller à :
Ajouter une réponse