Partage
  • Partager sur Facebook
  • Partager sur Twitter

Programme ne retourne au menu après fonctions

Sujet résolu
    22 février 2020 à 17:12:46

    Bonjour bonjour,

    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;
           }
    }
    



    • Partager sur Facebook
    • Partager sur Twitter
      22 février 2020 à 17:37:46

      Hello,

      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

      • Partager sur Facebook
      • Partager sur Twitter

      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

        22 février 2020 à 19:03:41

        Effectivement ça fonctionne, merci :)

        edgarjacobs a écrit:

        Hello,

        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



        • Partager sur Facebook
        • Partager sur Twitter

        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.
        • Editeur
        • Markdown