Aide programmation C !!!

Aide programmation C !!! - C - Programmation

Marsh Posté le 14-01-2012 à 11:53:24    

bonjour j'ai besoin de conseil car je bloque en ce moment  :sweat:  
 
J'essaie de crée un code permettant la saisie dans un fichier "Annuaire" (fichier texte) des donnée tel que nom, prenom, tel ... en faisant un contact par ligne . La saisie du nom est obbligatoire
 

Code :
  1. typedef struct{
  2.     int n;
  3.     int thai;
  4.     char * Nom[thai]; // Ce champ est obligatoire
  5.     char * Prenom[thai];
  6.     char * Societe[thai];
  7.     int * TelFixe[15];
  8.     int * TelPro[15];
  9.     int * TelPerso[thai];
  10.     char * CodePostale[5];
  11.     char * AdresseRue[3];
  12.     char * Ville[thai];
  13.     char * AdresseMailPro[thai];
  14.     char * AdresseMailPerso[thai];
  15.     int * DateNaiss[8]: // sous la forme JJMMAAAA
  16.      thai= malloc(n*sizeof(char)); // pour réserver de la place en fonction de ce qui a été envoyer par le client
  17.     if (Nom!=NULL)
  18.        {
  19.             printf("Veuillez saisir votre nom\n" ),Nom;
  20.             printf("Veuillez saisir votre prenom\n" ),Prenom;
  21.             printf("Veuillez saisir le nom de votre société\n" ),Societe;
  22.             printf("Taper votre numéro de telephone Fixe\n" ),TelFixe;
  23.             printf("Taper votre numéro de telephone personnel\n" ),TelPerso;
  24.             printf("Taper votre numéro de telephone profesionnel\n" ),TelPro;
  25.             printf("Veuillez saisir votre numéro de code postal\n" ),CodePostal;
  26.             printf("Veuillez saisir votre numéro de rue\n" ),AdresseRue;
  27.             printf("Veuillez saisir le nom de votre ville\n" ),Ville;
  28.             printf("Veuillez saisir votre adresse e-mail Professionnelle \n" ),AdresseMailPro;
  29.             printf("Veuillez saisir votre adresse e-mail Personnelle \n" ),AdresseMailPerso;
  30.             printf("Veuillez saisir votre date de naissance \n" ),DateNAiss;
  31.         }
  32.     else
  33.         {
  34.             printf(" Le champ nom est obligatoire" );
  35.         }
  36.     free(thai);
  37. }contact;


 
Comme je ne connait pas la valeur que le client va saisir j'ai fait un malloc !
 
de plus dans ce même fichier "Annuaire" je veut chercher une personne et l'afficher (donc je cherche une ligne!)

Code :
  1. //On cherche un contact dans notre annuaire et on l'affiche
  2. int SearchContact(char nom, char prenom){
  3.     FILE *Annuaire;
  4. //concatenation nom_prenom
  5.     char st1[] = nom;
  6.     char st2[] = prenom;
  7.     char st3[] = "/n";
  8.     strcat(st1, st3);
  9.     strcat(st1, st2);
  10.     Annuaire=fopen(st1,"r+" );
  11.     if(Annuaire==NULL){
  12.         printf("Le fichier n'existe pas !!\n" );
  13.         Emission("Le contact recherché n'existe pas !!\n" );
  14.         return 1;
  15.     }else{
  16.         caractere = fgetc(Annuaire);
  17.         while (caractere != EOF){
  18.             if(caractere=='$'){
  19.                 Emission("\n" );
  20.             }else{
  21.                 Emission(caractere);
  22.                 caractere = fgetc(Annuaire);
  23.             }
  24.         }
  25.     }
  26.     fclose(Annuaire);
  27.     return 0;
  28. }


 
 
 
Mais cela ne fonctionne pas !!!
 
Merci d'avance
 
 

Reply

Marsh Posté le 14-01-2012 à 11:53:24   

Reply

Marsh Posté le 14-01-2012 à 12:31:00    

Citation :

int thai;
char * Nom[thai];


Ce genre de chose n'est pas possible en C
Il faut faire
int thai;
char * Nom;
 
et plus tard, lorsque la valeur de thai est connue, allouer le tableau
Nom = malloc(thai);
 
Pour le reste, c'est trop bourré d'erreur pour que quoi que ce soit marche, a commencer par le  thai= malloc(n*sizeof(char));  qui ne veut rien dire, et qui a un sizeof(char) inutile.
 
A+,
 


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 14-01-2012 à 14:34:15    

Nom = malloc(thai+1) peut-être ?

Reply

Marsh Posté le 14-01-2012 à 14:50:50    

Ça, ca va dépendre de ses données.
Ça peut très bien être la valeur max pour un format de stockage, et les opérations de lectures peuvent en tenir compte.
Sans plus d'info sur le modèle de données, autant rester dans le général.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 14-01-2012 à 19:23:15    

gilou a écrit :

Citation :

int thai;
char * Nom[thai];


Ce genre de chose n'est pas possible en C


Salut
 
Il me semble avoir lu quelque part que c'est autorisé dans la dernière version.
Quelqu'un peut confirmer ???

Reply

Marsh Posté le 14-01-2012 à 19:42:15    

Sauf que la ça marchera pas.
Il faut que thai puisse être évalué avant l'allocation de l'array, et la, thai a seulement été déclaré, et pas initialisé.
 
Ca se fait depuis le C99 avec les Variable Length Arrays (ou VLA).
http://drdobbs.com/184401444
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed