aide pour creation annuaire (débutant) - C - Programmation
Marsh Posté le 23-03-2007 à 14:37:57
Utilise un debugger et observe le comportement de ton programme, t'y verras plus clair.
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.
Marsh Posté le 23-03-2007 à 14:58:21
Bah bien sûr ca continue à planter, ca résoud pas encore tes erreurs
A la ligne ou ca plante, vérifie la valeur des variables en jeu, et vois si ca te parait cohérent.
Marsh Posté le 23-03-2007 à 14:59:30
Anarchne a écrit : Bonjour. |
Comportement indéfini :
|
http://mapage.noos.fr/emdel/codage.htm#cfg_compilo
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!!!
Marsh Posté le 24-03-2007 à 14:50:53
Code :
|
Tu comprends ce que tu fais là?
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.