Structure en C
assile
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Je souhaiterais creer un repertoire en langage C mais vu mes compétences limitées en informatique, je n'arrive pas à avancer car il y a des erreurs dans le début de mon programme que je n'arrive pas à expliquer. Si quelqu'un pouvait m'aider, ce serait super sympa!! Voici ce que j'ai commencer à faire :
#include<stdio.h>
#include<string.h>
#define MAX 200
struct t_contact
{
char categorie[20];
char nom[40];
char adresse[100];
char telephone[20];
char email[40];
char nom_photo[40];
};
struct t_repertoire
{
struct t_contact TAB[MAX];
};
void ajouter(struct t_contact *contact, struct t_repertoire repertoire, int *n)
{
//precondition : 0<=n<MAX
//postcondition : le repertoire contient un contact de plus, à la fin du tableau, n vaut n+1
repertoire[(*n)] = *contact;
(*n) = (*n)+1;
}
int main()
{
int choix;
struct t_contact *contact;
struct t_repertoire repertoire;
int n=0;
char nom[40];
do
{
printf("\n\n1- Ajouter un contact\n");
printf("2- Afficher le contenu du repertoire\n");
printf("3- Afficher un contact (en fonction de son nom)\n");
printf("4- Supprimer un contact (en fonction de son nom)\n");
printf("5- Classer les contacts (par nom)\n");
printf("6- Enregistrer\n");
printf("7- Restaurer\n");
printf("0- Fin\n\n");
printf("Quel est votre choix?\n");
scanf("%d",&choix);
switch(choix)
{
case 1: printf("\nNouveau contact :\n");
printf("Quelle est la categorie?\n");
scanf("%s",(*contact).categorie);
printf("Quel est le nom?\n");
scanf("%s",(*contact).nom);
printf("Quel est l'adresse?\n");
scanf("%s",(*contact).adresse);
printf("Quel est le telephone?\n");
scanf("%s",(*contact).telephone);
printf("Quel est l'email?\n");
scanf("%s",(*contact).email);
printf("Quel est le nom de la photo?\n");
scanf("%s",(*contact).nom_photo);
printf("%d\n",n);
if(n<MAX && n>=0)
ajouter(contact,repertoire,&n);
else
printf("Repertoire plein");
printf("%d\n",n);
break;
}
}
while(choix!=0);
return 0;
}
Merci d'avance.
Je souhaiterais creer un repertoire en langage C mais vu mes compétences limitées en informatique, je n'arrive pas à avancer car il y a des erreurs dans le début de mon programme que je n'arrive pas à expliquer. Si quelqu'un pouvait m'aider, ce serait super sympa!! Voici ce que j'ai commencer à faire :
#include<stdio.h>
#include<string.h>
#define MAX 200
struct t_contact
{
char categorie[20];
char nom[40];
char adresse[100];
char telephone[20];
char email[40];
char nom_photo[40];
};
struct t_repertoire
{
struct t_contact TAB[MAX];
};
void ajouter(struct t_contact *contact, struct t_repertoire repertoire, int *n)
{
//precondition : 0<=n<MAX
//postcondition : le repertoire contient un contact de plus, à la fin du tableau, n vaut n+1
repertoire[(*n)] = *contact;
(*n) = (*n)+1;
}
int main()
{
int choix;
struct t_contact *contact;
struct t_repertoire repertoire;
int n=0;
char nom[40];
do
{
printf("\n\n1- Ajouter un contact\n");
printf("2- Afficher le contenu du repertoire\n");
printf("3- Afficher un contact (en fonction de son nom)\n");
printf("4- Supprimer un contact (en fonction de son nom)\n");
printf("5- Classer les contacts (par nom)\n");
printf("6- Enregistrer\n");
printf("7- Restaurer\n");
printf("0- Fin\n\n");
printf("Quel est votre choix?\n");
scanf("%d",&choix);
switch(choix)
{
case 1: printf("\nNouveau contact :\n");
printf("Quelle est la categorie?\n");
scanf("%s",(*contact).categorie);
printf("Quel est le nom?\n");
scanf("%s",(*contact).nom);
printf("Quel est l'adresse?\n");
scanf("%s",(*contact).adresse);
printf("Quel est le telephone?\n");
scanf("%s",(*contact).telephone);
printf("Quel est l'email?\n");
scanf("%s",(*contact).email);
printf("Quel est le nom de la photo?\n");
scanf("%s",(*contact).nom_photo);
printf("%d\n",n);
if(n<MAX && n>=0)
ajouter(contact,repertoire,&n);
else
printf("Repertoire plein");
printf("%d\n",n);
break;
}
}
while(choix!=0);
return 0;
}
Merci d'avance.
A voir également:
- Structure en C
- Logiciel calcul structure bois gratuit - Télécharger - Architecture & Déco
- Structure d'un rapport de stage - Guide
- Structure url - Guide
- Trouvez l'erreur dans la structure du document et corrigez-la. - Forum Word
- Error pdf structure 40 - Forum PDF
2 réponses
Remarques pêle-mêle :
# On écrit généralement x->y au lieu de faire (*x).y
# Si tu veux modifier n dans ajouter, il faut mettre &n dans la définition et directement n dans le code (pas de *n) mais il serait plus logique que n soit dans la structure t_repertoire.
# Il est plus simple de définir de nouveaux type plutôt que de toujours transporter tes mot-clés struct :
Dans ce cas c'est des & que tu auras dans tes définitions plutôt que des *
Exemple : void ajouterContact(Contact &contact, Repertoire &repertoire)
# Tu n'as pas besoin de char nom[40] dans le main
# Il serait plus lisible de faire des fonctions intermédiaires dans ton main :
Remarque : ici le nouveau contact serait une variable locale de la fonction nouveauContact : Contact contact = repertoire->tab[repertoire->n];
# On écrit généralement x->y au lieu de faire (*x).y
# Si tu veux modifier n dans ajouter, il faut mettre &n dans la définition et directement n dans le code (pas de *n) mais il serait plus logique que n soit dans la structure t_repertoire.
# Il est plus simple de définir de nouveaux type plutôt que de toujours transporter tes mot-clés struct :
typedef struct t_contact { char categorie[20]; ... } *Contact; typedef struct t_repertoire { Contact tab[MAX]; int n; // le nombre de contact : 0<=n<=MAX } *Repertoire;
Dans ce cas c'est des & que tu auras dans tes définitions plutôt que des *
Exemple : void ajouterContact(Contact &contact, Repertoire &repertoire)
# Tu n'as pas besoin de char nom[40] dans le main
# Il serait plus lisible de faire des fonctions intermédiaires dans ton main :
do { choisirMenu(choix); switch (choix) { case 1 : nouveauContact(repertoire); break; } } while (choix!=0);
Remarque : ici le nouveau contact serait une variable locale de la fonction nouveauContact : Contact contact = repertoire->tab[repertoire->n];
Tu dois allouer dynamiquement de la mémoire à ton répertoire !