Salut,
quelques erreurs que j'ai remarqué
const x = 20 ; c'est plutot
const int x = 20;
mais ça ne marche pas
struct stagiaire stag[x];
en revanche tu peux utiliser
#define NBSTAGIAIRES 20
struct stagiaire stag[NBSTAGIAIRES ];
tu utilises des pointeurs mais nul part tu n'alloues pas de la mémoire avec malloc
Voilà ton code (un peu modifier)
si tu choisi 1 tu peut commencer la saisie, tu pourras toujours arrêter la saisie si au lieu de nom tu va taper
fin.
A ce moment tu reviendras dans le menu et tu pourras afficher les saisies en utilisant l'option 2
si tu choisi 2 sans avoir faire aucune saisie tu auras un message et le programme se termine
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NBSTAGIAIRES 20
#define LONG_NOM 50
#define LONG_PRENOM 50
#define LONG_MATIERE 50
/* les prototypes des fonctions */
int saisie(void);
int menu(void);
void affiche(void);
/* fin prototypes */
/* declaration de variables */
char nom[LONG_NOM], prenom[LONG_PRENOM];
char matiere[LONG_MATIERE];
int nb=0;
struct stagiaire
{
char* nom;
char* prenom ;
double note ;
char* matiere ;
};
struct stagiaire stag[NBSTAGIAIRES];
/* fin declaration de variables */
int main()
{
int choix,fin=0;
choix=menu();
if (choix == 1)
{
fin=saisie();
if(fin)
choix=menu();
}
if (choix == 2)
affiche();
return 0;
}
/* fonction saisie */
int saisie (void)
{
int i,quitter=0;
for (i=0;i<NBSTAGIAIRES && (! quitter);i++)
{
printf ("\nstagiaire n° %i : \n",i+1);
/* saisie nom */
printf ("donner le nom du stagiaire %i ( nom=fin pour quitter) : ",i+1);
scanf ("%s",nom);
stag[i].nom =(char *) malloc(strlen(nom) + 1);
strcpy(stag[i].nom,nom);
quitter = (strcmp(nom,"fin")==0);
/* quitter le programme si on a saisi fin
* sinon continuer */
if (! quitter)
{
/* saisie prenom */
printf ("donner le prenom du stagiaire %i : ",i+1);
scanf ("%s",prenom);
stag[i].prenom = (char *) malloc(strlen(prenom)+1);
strcpy(stag[i].prenom,prenom);
/* saisie note */
printf ("donner la note du stagiaire %i : ",i+1);
scanf ("%lf",&stag[i].note);
/* tant que la note est plus petite que 0
* ou plus grande que 20 */
while ( ( stag[i].note < 0 ) || ( stag[i].note > 20 ))
{
printf ("redonner la note du stagiaire %i : ",i+1) ;
scanf ("%lf",&stag[i].note);
}
/* saisie la matiere */
printf ("donner le module(matiere) du stagiaire %i : ",i+1);
scanf("%s",matiere);
stag[i].matiere=(char *) malloc(strlen(matiere)+1);
strcpy(stag[i].matiere,matiere);
}
}
/* récuperation du nombre de stagiaires saisies */
nb=--i;
return quitter;
}
/* fonction menu */
int menu(void)
{
int choix;
printf("\n1. saisie\n2. recherche\n3. quitter\n");
printf("Faites votre choix : ");
scanf("%d",&choix);
return choix;
}
/* fonction affiche */
void affiche(void)
{
int i;
if(nb==0)
printf("Il n'y a pas de stagiaire!\n");
else
{
for(i=0;i<nb;i++)
{
printf("Stagiaire numéro %d\n",i+1);
printf("NOM : %s\n",stag[i].nom);
printf("PRENOM : %s\n",stag[i].prenom);
printf("NOTE : %.02f\n",stag[i].note);
printf("MATIERE : %s\n",stag[i].matiere);
}
}
}