Je débute en C et j'ai un projet de gestionnaires d'élèves à faire pour les cours. J'ai donc dû créer plusieurs fonctions pour effectuer différentes tâches mais aussi un menu interactif qui invite l'utilisateur à exécuter la tâche(donc la fonction) qu'il veut.
Mon problème ici est qu'à la fin d'une fonction, au lieu de retourner au menu interactif, le programme s'arrête. Pas de messages d'erreurs ou quoi, il s'arrête tout simplement. Je ne sais pas trop d'où ça peut venir donc si quelqu'un a une idée je suis preneur.
Merci d'avance
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int i,j,n;
struct eleves{
char prenom[50];
char nom[50];
char promotion[50];
int id;
float notes[50];
float moyenne;
} s[30];
void ajout_eleve(){
char *k;
k = (char*) malloc(sizeof(char)*4);
printf("Entrez les informations de l eleve :\n");
for (i = 0; i < 30; ++i) {
s[i].id = i + 1;
printf("\n|| Pour l eleve numero %d ||\n", s[i].id);
printf("Entrez le prenom : ");
scanf("%s", s[i].prenom);
printf("Entrez le nom de famille : ");
scanf("%s", s[i].nom);
printf("Entrez la promotion : ");
scanf("%s", s[i].promotion);
printf("Voulez vous ajouter d autres eleves ? ");
scanf("%s", k);
if (strcmp( k, "non") == 0) break;
}
}
void lister_eleves(){
printf("Affichage des informations de l'etudiant :\n\n");
for (i = 0; i < 30; ++i) {
printf("\nIdentifiant numero : %d\n", i + 1);
printf("Prenom : ");
puts(s[i].prenom);
printf("Nom : ");
puts(s[i].nom);
printf("Promotion : ");
puts(s[i].promotion);
printf("\n");
}
}
void supprimer(){
int j,id,k;
printf("Entrez l'identifiant de l etudiant que vous souhaitez supprimer : ");
scanf("%d",&id);
for(i=1;i<=n;i++){
if(s[i].id==id){
k=i;
n=n-1;
for(j=k;j<=n;j++){
s[j]=s[j+1];
}
}
}
}
void modifier(){
int id,i = 0;
printf("Entrez l'identifiant de l eleve que vous souhaitez modifier : ");
scanf("%d",&id);
printf("Nom : ");
scanf("%s",s[i].nom);
printf("Prenom : ");
scanf("%s",s[i].prenom);
printf("Moyenne : ");
scanf("%f",s[i].notes);
printf("Filiere : ");
scanf("%s",s[i].promotion);
}
void ajout_note(){
int j=0;
float somme = 0;
for(i=0;i<30;i++){
printf("Ajouter une note : ");
scanf("%f",&s[i].notes[j]);
}
j++;
for(i=0; i<j; i++){
somme = somme + s[j].notes[i];
}
s[i].moyenne = somme/j;
}
void detail_eleve_par_id(){
int id;
printf("Entrez l identifiant de l etudiant souhaite : ");
scanf("%d",&id);
for(i=1;i<=n;i++){
if(s[i].id==id){
printf("Prenom : %s\n",s[i].prenom);
printf("Nom : %s\n",s[i].nom);
printf("Promotion : %s\n",s[i].promotion);
printf("Notes : %0.2f\n\n",s[i].notes);
}
}
}
int affichageMenu(void){
int choixMenu;
printf("------Menu------\n\n");
printf("1) Ajouter un eleve---------------------------- \n");
printf("2) Lister les eleves--------------------------- \n");
printf("3) Supprimer un eleve-------------------------- \n");
printf("4) Modifier un eleve--------------------------- \n");
printf("5) Ajouter une note---------------------------- \n");
printf("6) Detail d un eleve--------------------------- \n");
printf("7) Quitter le programme------------------------ \n");
printf("\nEntrez votre choix : \n\n");
scanf("%d", &choixMenu);
return choixMenu;
}
int main() {
switch (affichageMenu())
{
case 1:
ajout_eleve();
break;
case 2:
lister_eleves();
break;
case 3:
supprimer();
break;
case 4:
modifier();
break;
case 5:
ajout_note();
break;
case 6:
detail_eleve_par_id();
break;
case 7:
printf("Vous quittez le programme.");
break;
default:
printf("Votre choix n'est pas valide \n");
break;
}
}
Normal. Tu dois entourer ton switch() sur affichageMenu() par do....while (ou un while):
#include <stdbool.h>
int main(void) {
bool done=false;
do
switch(affichageMenu()) {
case 1:
ajouter_eleve();
break;
case 2:
lister_eleves();
break;
case 3:
supprimer_eleve();
break;
case 4:
modifier_eleve();
break;
case 5:
ajouter_note();
break;
case 6:
detail_eleve_par_id();
break;
case 7:
done=true;
printf("Vous quittez le programme.");
break;
default:
printf("Votre choix n'est pas valide \n");
break;
}
while(!done);
return(0);
}
- Edité par edgarjacobs 22 février 2020 à 17:49:07
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Normal. Tu dois entourer ton switch() sur affichageMenu() par do....while (ou un while):
#include <stdbool.h>
int main(void) {
bool done=false;
do
switch(affichageMenu()) {
case 1:
ajouter_eleve();
break;
case 2:
lister_eleves();
break;
case 3:
supprimer_eleve();
break;
case 4:
modifier_eleve();
break;
case 5:
ajouter_note();
break;
case 6:
detail_eleve_par_id();
break;
case 7:
done=true;
printf("Vous quittez le programme.");
break;
default:
printf("Votre choix n'est pas valide \n");
break;
}
while(!done);
return(0);
}
- Edité par edgarjacobs il y a environ 1 heure
Programme ne retourne au menu après fonctions
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent