Probleme de langage C

Fermé
Dark-Boy - 20 juin 2010 à 21:34
timike972 Messages postés 19 Date d'inscription mercredi 16 juin 2010 Statut Membre Dernière intervention 1 octobre 2011 - 21 juin 2010 à 09:58
Bonjour,





Bojour j'ai cree un programme qui marche mais le probleme c'est que je n'arrive pas a faire une recherche correcte des moyenne .

Lorsque que je saisie par exemple les moyenne 14, 15, 9 etc .... , cela marche , mon programme me donne la liste des eleve ayant eu cette moyenne mais lorsque que je saisie par exemple un nombre a virgule , qui correspon a un eleve donne la moyenne comporte des chiffre apres la virgule par exemple 10.33 , 10.5 etc.... cela ne marche pas .

J'aimerai obtenir de l'aide, un indice , j'ai cherché de partout mais je ne trouve l'origine de ce problème.

Voici mon code ci-dessu

/                                                                                                              

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*Déclaration de la structure eleve*/

struct eleve{
             double n1;
             double n2;
             double n3;
             double moyenne;
             char nom[600];
             }; 

/* element du tableau (trait,lignes, colonnes)*/

typedef struct eleve eleve;


void element_tablo(){
                     printf("\n_____________________________________\n");
                     printf("Nom        |note1|note2|note3|Moyenne|");
                     printf("\n_____________________________________\n");
                    } 

void element_tablo1(){
                      printf("\n___________________\n");
                      printf("Nom        |Moyenne|");
                      printf("\n___________________\n");
                      }

void element_tablo2(){
                      printf("-------------------------------------\n");
                     }

void element_tablo3(){
                      printf("--------------------\n");
                     }

void presentation_menu()
{
/* === Menu ====*/

printf("\n\n               ==== Menu ====         \n\n");
printf("\n Voulez vous :        \n");
printf("\n 1. Afficher le tableau par ordre alphabetique   ");
printf("\n 2. Afficher le tableau par ordre de merite (moyenne)       "); 
printf("\n 3. Afficher la meilleur moyenne ainsi que la plus mauvaise ainsi que l'eleve concerne ");
printf("\n 4. Afficher le tableau qui elimine les moyenne inférieur  a 3  ");
printf("\n 5. Chercher une moyenne donnée et afficher tous les élèves ayant cette moyenne ");
printf("\n 6. Chercher un  élève donné et afficher ses notes ");
printf("\nVeuillez saisir le nombre correspondant a votre choix puis appuyez sur la touche 'ENTREE' ou quitter en appuyant sur d'autres touches'\n\n ");
}

int main(void){ 

/*Declaration de variable*/

int i,k,a,j,choix,b;
double moyennes;


/*appel de la structure*/

eleve tablo[600];
eleve echange;

/* Message du commencement de la saisie */

printf("\nVous allez  saisir un tableau contenant des noms d'eleves ainsi que leurs 3 notes.\n\n");
printf("Saisissez le nombre d'elève qu'il y'aura dans le tableau:\n");

/* Saisie du tableau */

scanf("%d",&k);

for (i=0;i<k;i++){ 
                  a=i+1;       
                  printf("\n Tapez le nom de l'eleve n° %d :",a);
                  scanf("%s",tablo[i].nom);
                  printf("\n Saisissez la premiere note (n1) de l'eleve %s: ",tablo[i].nom);
                  scanf("%lf",&tablo[i].n1);
                  printf("\n Saisissez la deuxieme note (n2) de l'eleve %s: ",tablo[i].nom);
                  scanf("%lf",&tablo[i].n2);
                  printf("\n Saisissez la troisieme note (n3) de l'eleve %s: ",tablo[i].nom);
                  scanf("%lf",&tablo[i].n3);
                  tablo[i].moyenne = (tablo[i].n1+tablo[i].n2+tablo[i].n3)/3 ;
                  }

/* Affichage du tableau saisie*/

printf("\n       == saisie du tableau ==                   \n");
element_tablo();

for(i=0;i<k;i++){
                 printf("%10s|",tablo[i].nom);
	         printf("%5.2lf|%5.2lf|%5.2lf|%5.2lf   |\n",tablo[i].n1,tablo[i].n2,tablo[i].n3,tablo[i].moyenne);
                 }
element_tablo2();

/*presentation du menu*/

presentation_menu();

/* fonction menu*/

int menu(){
char compar_nom;

scanf("%d",&choix);

switch(choix){
              case 1:
                   /* tableau trié par ordre alphabetique (choix 1)*/ 
    
                   /* tri par ordre par ordre alpahabetique*/                 
                   for(i=0;i<k;i++)
                       {
                        for(j=k-1;j>i;j--)
                                       {
                                        if(strcmp(tablo[j].nom,tablo[j-1].nom)<0)
                                           {
                                            /* echange=tablo[j].nom;
                                             tablo[j].moyenne=tablo[j-1].nom;
                                             tablo[j-1].moyenne=nom;*/
                                             memcpy(&echange,&tablo[j],sizeof(echange));
                                             memcpy(&tablo[j],&tablo[j-1],sizeof(echange));
                                             memcpy(&tablo[j-1],&echange,sizeof(echange));
                                            }
    }
}               
                /*Affichage du tableau trié par ordre alphabetique*/
                printf("\n * tableau trié par ordre alphabetique *");
                element_tablo();                
                for(i=0;i<k;i++){
                                printf("%10s|",tablo[i].nom);
	                        printf("%5.2lf|%5.2lf|%5.2lf|%5.2f   |\n",tablo[i].n1,tablo[i].n2,tablo[i].n3,tablo[i].moyenne);
                                }
                
                element_tablo2();     
                presentation_menu();
                menu();
                
                break;

                case 2:
                 /* tableau trié par ordre de merite (choix2)*/
           
                 /* trie par ordre de merite*/    
                 for(i=0;i<k;i++)
                      {
                        for(j=k-1;j>i;j--)
                            {
                              if(tablo[j].moyenne>tablo[j-1].moyenne)
                                 {
                                   memcpy(&echange,&tablo[j],sizeof(echange));
                                   memcpy(&tablo[j],&tablo[j-1],sizeof(echange));
                                   memcpy(&tablo[j-1],&echange,sizeof(echange));
                                  }
  }
}
                      /*Affichage du tableau trié par ordre du merite*/
                      printf("\n* tableau par ordre de merite*");
                      element_tablo();
                      for(i=0;i<k;i++){
                                       printf("%10s|",tablo[i].nom);
	                               printf("%5.2lf|%5.2lf|%5.2f|%5.2lf   |\n",tablo[i].n1,tablo[i].n2,tablo[i].n3,tablo[i].moyenne);
                                       }
                    
                      element_tablo2(); 
                      presentation_menu();
                      menu();
                      
                      break;

                      case 3:
                            /* Affichage de la meilleur moyenne et de la plus mauvaise (choix 3)*/
                             
                             /* tri de la moyenne*/ 
                             for(i=0;i<k;i++)
                                 {
                                  for(j=k-1;j>i;j--)
                                   {
                                    if(tablo[j].moyenne>tablo[j-1].moyenne)
                                       {
                                        memcpy(&echange,&tablo[j],sizeof(echange));
                                        memcpy(&tablo[j],&tablo[j-1],sizeof(echange));
                                        memcpy(&tablo[j-1],&echange,sizeof(echange));
                                       }
}
}                               
                               /* Affichage de la meilleur moyenne (tablo[0]).moyenne*/
                               printf("\n == moyenne la plus haute == ");
                               element_tablo1();
                               for(i=0;i<k;i++)
                                  {
                                   if(tablo[i].moyenne==tablo[0].moyenne) 
                                         {
                                          printf("%10s |",tablo[i].nom);
	                                  printf("%5.2f  |\n",tablo[i].moyenne);
                                         }
}
                        element_tablo3(); 
 
                        /*Affichage de la plus mauvaise moyenne*/

                        /* tri des moyennes ( de la plus basse a la plus haute) */
                        for(i=0;i<k;i++){
                                       for(j=k-1;j>i;j--)
                                            {
                                             if(tablo[j].moyenne<tablo[j-1].moyenne)
                                                {
                                                 memcpy(&echange,&tablo[j],sizeof(echange));
                                                 memcpy(&tablo[j],&tablo[j-1],sizeof(echange));
                                                 memcpy(&tablo[j-1],&echange,sizeof(echange));
                                                }
     }
}
                               /* Affichage de la plus basse moyenne (tablo[0].moyenne)*/
                          printf("\n== moyenne la plus basse ==");
                          element_tablo1();
                          for(i=0;i<k;i++)
                              {
                               if(tablo[i].moyenne==tablo[0].moyenne) 
                                  {
                                   printf("%10s |",tablo[i].nom);
	                           printf("%5.2f  |\n",tablo[i].moyenne);
                                   }
}
                       element_tablo3(); 
                       presentation_menu();
                       menu();
                       
                      break;

                      case 4:
                              /* Eliminer les moyennes inferieure a 3 et egale (choix 4) */
                                
                                printf("\nDans ce tableau les eleves ayant une moyenne inferieur a 3 ne sont pas represente\n"); 
                                element_tablo1();
                                for(i=0;i<k;i++)
                                     {
                                      if(tablo[i].moyenne >3)
                                          {
                                           printf("%10s |",tablo[i].nom);
	                                   printf("%5.2f  |\n",tablo[i].moyenne);
                                           }
 }
                       element_tablo3(); 
                       presentation_menu();
                       menu(); 
                      
                       break;

                       case 5:
                              /* Rechercher une moyenne et afficher les eleves ayant cette moyenne (choix 5)*/

                             printf( "\n recherche moyenne \n");
                             printf(" Veuillez saisir la moyenne recherche et appuyez sur ' Entree ': ");
                             scanf("%lf",&moyennes);
                             printf("\nvoici les eleves ayant la moyennes que vous recherchiez\n");
                             
                             element_tablo1();
                             for(i=0;i<k;i++){
                                              if(tablo[i].moyenne == moyennes)
                                                 {
                                                  printf("%10s |",tablo[i].nom);
	                                          printf("%5.2lf  |\n",tablo[i].moyenne);                          
                                                 }
 }                     
                             element_tablo3();
                             presentation_menu();
                             menu();
                             break;

                   case 6:
                          /* Rechercher un eleve donné et afficher ses notes*/

                         printf( "\n rechercher un nom et afficher ses notes \n");
                         printf(" Veuillez saisir le nom recherche et appuyez sur ' Entree ': ");
                         scanf("%s",&compar_nom); 
                         element_tablo();
                         for(i=0;i<k;i++){
                                          if(strcmp(&compar_nom,tablo[i].nom) == 0)
                                            {
                                            printf("%10s |",tablo[i].nom);
	                                    printf("%5.2lf|%5.2lf|%5.2lf|%5.2lf  |\n",tablo[i].n1,tablo[i].n2,tablo[i].n3,tablo[i].moyenne);
                                           } 
 }                     
                      element_tablo2();
                      presentation_menu();
                      menu(); 
                      break;
     
                      default:
                              printf("\n A bientot \n\n");
                      break;

}
}
/* Appel de la fonction menu()*/
menu();

}


le probleme se situe a ce niveau:

case 5:
                              /* Rechercher une moyenne et afficher les eleves ayant cette moyenne (choix 5)*/

                             printf( "\n recherche moyenne \n");
                             printf(" Veuillez saisir la moyenne recherche et appuyez sur ' Entree ': ");
                             scanf("%lf",&moyennes);
                             printf("\nvoici les eleves ayant la moyennes que vous recherchiez\n");
                             
                             element_tablo1();
                             for(i=0;i<k;i++){
                                              if(tablo[i].moyenne == moyennes)
                                                 {
                                                  printf("%10s |",tablo[i].nom);
	                                          printf("%5.2lf  |\n",tablo[i].moyenne);                          
                                                 }
 }                     
                             element_tablo3();
                             presentation_menu();
                             menu();
                             break;



je vous remerci d'avance pour votre aide, la compilation marche .
A voir également:

1 réponse

timike972 Messages postés 19 Date d'inscription mercredi 16 juin 2010 Statut Membre Dernière intervention 1 octobre 2011
21 juin 2010 à 09:58
normal un nombre a virgule ne se déclare pas comme un integer mais plutot comme une float
donc tu ecrit
" float note; " et non pas " int note; "
0