aide pour creation annuaire (débutant)

aide pour creation annuaire (débutant) - C - Programmation

Marsh Posté le 23-03-2007 à 14:25:20    

Bonjour.
J'ai un problème avec mon programme d'annuaire et je n'arrive pas à voir où sa cloche.
Le voilà:
 
 
 
/*declaration des include*/
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define NBMAX 500
 
 
/*declaration des type def*/
typedef struct
{
        char nom[20];
        char prenom[20];
        char numtel[12];
}personne;
 
typedef personne *tableau[NBMAX];
 
 
 
/*declaration des prototypes*/
void menu(tableau p,int nbm);
void ajouter(tableau p,int nbm);
void afficher(tableau p);
void supprimer(tableau p);
void modifier(tableau p);
 
 
 
/*prototypes complets*/
void menu(tableau p,int nbm)
{
     char car;
     
     do
     {
          printf("             MENU\n\n" );
          printf("    Ajouter une personne à l'annuaire ....... A\n" );
          printf("    Afficher l'annuaire ..................... F\n" );
          printf("    Supprimer une personne de l'annuaire .... S\n" );
          printf("    Modifier une personne de l'annuaire ..... M\n" );
          printf("    Quitter ................................. Q\n" );
          printf("Votre choix :  " );
          car=toupper(getch());
     
                   switch(car)
                   {
                               
                              case 'A': ajouter(p,nbm);break;
                              case 'F': afficher(p);break;
                              case 'S': supprimer(p);break;
                              case 'M': modifier(p);break;
                              case 'Q': break;
                               
                              default : printf("Erreur de saisie !\n" );
                               
                   }
                   
     }
     while(car != 'Q');
     
}
           
 
void ajouter(tableau p,int nbm)
{
     int i;
     for (i=0;i<nbm;i++)
     {
         
         if (p[i]==NULL)
         {
                                 printf("\nQuel est le nom de la personne?" );
                                 gets(p[i]->nom);
                                 printf("\nQuel est le prénom de la personne?" );
                                 gets(p[i]->prenom);
                                 printf("\nQuel est le numéro de téléphone de la personne?" );
                                 gets(p[i]->numtel);
 
          }
           
      }
}
 
 
 
void afficher(tableau p)
{
     int i;
     int l=strlen(p);
     for (i=0;i<l;i++)
     {
         printf("%s     %s     %s\n",p[i]->nom,p[i]->prenom,p[i]->numtel);
     }
 
}
 
 
void supprimer(tableau p)
{
     char recherche[20];
     int rech;
     int i;
     
     printf("Quelle personne voulez-vous supprimer? (entrez le nom)" );
     gets(recherche);
     for (i=0;i<NBMAX;i++)
     {
         
         rech=strcmp(p[i]->nom,recherche);
         
         if (rech==0)
         {
                     printf("\nQuel est le nouveau numéro de téléphone de la personne?" );
                     gets(p[i]->numtel);                
         }
         
     }
         
     
 
}
 
 
 
void modifier(tableau p)
{
     char recherche[20];
     int rech;
     int i;
     
     printf("Quelle personne voulez-vous supprimer? (entrez le nom)" );
     scanf("%s",recherche);
     for (i=0;i<NBMAX;i++)
     {
         
         rech=strcmp(p[i]->nom,recherche);
         
         if (rech==0)
         {
                       free(p[i]);
                       p[i]=NULL;
         }
           
     }
     
}
 
 
 
 
 
/*main*/
int main()
{
    tableau tab;
     
    /*reservation*/
    int i;
     
    for (i=0;i<NBMAX;i++)
    {
                 
         tab[i]=(personne*)malloc(sizeof(personne));
         tab[i]=NULL;
         
    }
     
     
    menu(tab,NBMAX);
    return 0;
}
 
 
 
 
Je sais qu'il y a des trucs qui ne vont pas dans mes fonctions modif et suppr  mais c'est surtout les fonctions ajouter et afficher qui me chagrinent.
En effet lorsque je veux ajouter une personne le programme me demande le nom et pouf il se ferme apres que je l'ais entré.
A mon avis j'ai mal réservé la mémoire dynamique pour les noms prénoms et numéros de tel mais je ne suis pas sûr.
Si quelqu'un pouvait me dire se qui ne va pas se serait cool.

Reply

Marsh Posté le 23-03-2007 à 14:25:20   

Reply

Marsh Posté le 23-03-2007 à 14:37:57    

Utilise un debugger et observe le comportement de ton programme, t'y verras plus clair.


---------------
Töp of the plöp
Reply

Marsh Posté le 23-03-2007 à 14:48:32    

J'ai déjà fais sa me met une violation d'accès est apparue (erreur de segmentation).
J'y vois pas plus clair pour autant.

Reply

Marsh Posté le 23-03-2007 à 14:58:21    

Bah bien sûr ca continue à planter, ca résoud pas encore tes erreurs [:magicbuzz]
 
A la ligne ou ca plante, vérifie la valeur des variables en jeu, et vois si ca te parait cohérent.


---------------
Töp of the plöp
Reply

Marsh Posté le 23-03-2007 à 14:59:30    

Anarchne a écrit :

Bonjour.
J'ai un problème avec mon programme d'annuaire et je n'arrive pas à voir où sa cloche.
Le voilà:


Comportement indéfini :  


Compiling: main.c
main.c: In function `afficher':
main.c:92: warning: passing arg 1 of `strlen' from incompatible pointer type
main.c: At top level:
main.c:157: warning: function declaration isn't a prototype
Linking console executable: console.exe
Process terminated with status 0 (0 minutes, 9 seconds)
0 errors, 2 warnings


 
http://mapage.noos.fr/emdel/codage.htm#cfg_compilo


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 23-03-2007 à 15:10:31    

comment sa c'est pas un  prototype?
Au secour là!!!
 
Le strlen c'est pas très grave je peux le changer.
C'est pas à cause de sa que sa plante.
C'est au niveau du """" gets(p[i]->nom);  """"  de ma fonction ajouter.
Au fait quand je fais un debug j'ajoute i p[i] et p[i]->nom comme variables et il ne les affichent jamais!!!!
Au secour bis!!!

Reply

Marsh Posté le 24-03-2007 à 13:46:21    

up.

Reply

Marsh Posté le 24-03-2007 à 14:50:53    

Code :
  1. tab[i]=(personne*)malloc(sizeof(personne));
  2. tab[i]=NULL;


 
Tu comprends ce que tu fais là?

Reply

Marsh Posté le 24-03-2007 à 21:10:48    

Je pense qu'il veut l'initialiser mais il l'a mal fait  [:hello_cass]

Reply

Sujets relatifs:

Leave a Replay

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