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.