[C] Programme simple...

Programme simple... [C] - C - Programmation

Marsh Posté le 31-07-2004 à 18:03:13    

Mon programme foire completement,
je ne comprends pas bien l'utilisation des fonctions et des structures
voila pourquoisans doute tant de problemes...
 
merci d'aider un pauvre debutant comme moi...
 

Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3. #define MAX 50
  4. #define SIZE 20
  5. struct etudiant
  6. {
  7. char nom[SIZE] ;
  8. char code ;
  9. int cote1 ;
  10. int cote2 ;
  11. int cote3 ;
  12. };
  13. int menu(void) ;
  14. void saisie(struct etudiant tab[], int *dim) ;
  15. void affichage(struct etudiant tab[], int dim) ;
  16. main()
  17. {
  18. int choix ;
  19. int end = 0 ;
  20. int dim ;
  21. struct etudiant tableau[MAX] ;
  22. do
  23. {
  24.  choix = menu() ;
  25.  switch(choix)
  26.  {
  27.  case 1 :
  28.   saisie(tableau, &dim) ;
  29.   break ;
  30.  case 2 :
  31.   affichage(tableau, dim) ;
  32.   break ;
  33.  case 3 :
  34.   end = 1 ;
  35.   break ;
  36.  }
  37. }
  38. while(end == 0) ;
  39. }
  40. int menu(void)
  41. {
  42. int x ;
  43. printf("\n\n\n-----  Menu  -----\n\n\n" ) ;
  44. printf("1 : Saisie des etudiants\n" ) ;
  45. printf("2 : Affichage des etudiants avec la moyenne des cotes\n" ) ;
  46. printf("6 : Quitter\n\n\n" ) ;
  47. printf("Votre choix : " ) ;
  48. scanf("%d",&x) ;
  49. return x ;
  50. }
  51. void saisie(struct etudiant tab[], int *dim)
  52. {
  53. int x ;
  54. int i=0, j ;
  55. int result, position ;
  56. struct etudiant temp ;
  57. do
  58. {
  59.  printf("\n\nCombien d'etudiant voulez-vous saisir (max 50) " ) ;
  60.  scanf("%d", &x) ;
  61. }
  62. while(x > MAX || x < 1) ;
  63. *dim = x ;
  64. printf("\n\n\n-----  Etudiant numero %d  -----\n\n", x) ;
  65. printf("Nom  : " ) ;
  66. fflush(stdin) ;
  67. gets(temp.nom) ;
  68. printf("Code (1 caractere) : " ) ;
  69. scanf("%c", &temp.code) ;
  70. printf("Cote 1 : " ) ;
  71. scanf("%d", &temp.cote1) ;
  72. printf("Cote 2 : " ) ;
  73. scanf("%d", &temp.cote2) ;
  74. printf("Cote 3 : " ) ;
  75. scanf("%d", &temp.cote3) ;
  76. }
  77. void affichage(struct etudiant tab[], int dim)
  78. {
  79. int i, moyenne, moyenne_totale=0 ;
  80. for(i=1; i<=dim; i++)
  81. {
  82.  moyenne = (tab[i].cote1 + tab[i].cote2 + tab[i].cote3)/3 ;
  83.  moyenne_totale = moyenne_totale + moyenne ;
  84.  printf("\n\n\n-----  Etudiant %d  -----\n\n", i) ;
  85.  printf("Nom  : %s\n", tab[i].nom) ;
  86.  printf("Code : %c\n\n", tab[i].code) ;
  87.  printf("Cote 1 : %d\n", tab[i].cote1) ;
  88.  printf("Cote 2 : %d\n", tab[i].cote2) ;
  89.  printf("Cote 3 : %d\n\n", tab[i].cote3) ;
  90.  printf("Moyenne : %d", moyenne) ;
  91.  if((i%2)==0)
  92.   fflush(stdin) ;
  93.   getchar() ;
  94. }
  95. moyenne_totale = moyenne_totale/dim ;
  96. printf("\n\n\nMoyenne totale : %d", moyenne_totale) ;
  97. }

Reply

Marsh Posté le 31-07-2004 à 18:03:13   

Reply

Marsh Posté le 31-07-2004 à 18:10:18    

1) vire les gets
2) fais des allocations dynamiques
3) fflush(stdin) ne sert à rien du tout
4) un scanf peut lire plusieurs choses à la fois, pas la peine d'en faire 36
4) 1 printf suffit, pas la peine d'en faire 36
5) while(x > MAX || x < 1) ; superbe
6) ta fonction saisie ne fait rien


Message édité par Taz le 31-07-2004 à 18:10:33
Reply

Marsh Posté le 01-08-2004 à 00:10:27    

lol


---------------
job
Reply

Marsh Posté le 01-08-2004 à 01:52:35    

Taz a écrit :

1) vire les gets
2) fais des allocations dynamiques
3) fflush(stdin) ne sert à rien du tout
4) un scanf peut lire plusieurs choses à la fois, pas la peine d'en faire 36
4) 1 printf suffit, pas la peine d'en faire 36
5) while(x > MAX || x < 1) ; superbe
6) ta fonction saisie ne fait rien


 
A part que c'est laid et tordu, je ne vois pas trop le probleme, cela semble cadrer avec ce qu'il desire.
 
=>nicolas
Principal probleme dans saisie: tu ne remplis pas ton tableau d'etudiant (enfin tu en fais 1)
Sinon tu ferais bien de suivre les conseils deja donnes, en particulier pour les printf, scanf et fflush. Pour les allocations dynamiques, attends un peu de bien tout digerer :o

Reply

Marsh Posté le 01-08-2004 à 02:11:35    

thermocline a écrit :

A part que c'est laid et tordu, je ne vois pas trop le probleme, cela semble cadrer avec ce qu'il desire.

y a des moyens plus simple de faire boucler indéfiniment un programme.

Reply

Marsh Posté le 01-08-2004 à 02:36:53    

Taz a écrit :

y a des moyens plus simple de faire boucler indéfiniment un programme.


 
 :??:  
 
Il veut que l'utilisateur entre un nombre compris entre 1 et MAX.  
 
Il a bien mis ||, les regles de parentheses sont respectees, alors je ne vois pas ou est le probleme (en meme temps j'avais la tete en bas toute la journee, je dois avoir le cerveau abime).
 
C'est même la partie la plus belle de son code, s'il doit y en avoir une :o

Reply

Marsh Posté le 01-08-2004 à 03:19:37    

et que ce passe-t-il si x remplis justement une de ces conditions ?

Reply

Marsh Posté le 01-08-2004 à 03:30:04    

Taz a écrit :

et que ce passe-t-il si x remplis justement une de ces conditions ?


 
he ben l'utilisateur qui a rentrée une telle valeur sera puni comme il le merite, l'enfoiré :O

Reply

Marsh Posté le 01-08-2004 à 05:28:45    

Pas mieux

Reply

Marsh Posté le 01-08-2004 à 17:50:50    

1) vire les scanf, prefere les fgets.
2) Getchar n'est pas standard
3) int main (void) a la rigueur, mais pas main tout court, main doit retourner 0 si tout c'est bien passé.

Reply

Marsh Posté le 01-08-2004 à 17:50:50   

Reply

Marsh Posté le 01-08-2004 à 17:51:37    

Taz a écrit :

y a des moyens plus simple de faire boucler indéfiniment un programme.


 
while(1)  :whistle:

Reply

Marsh Posté le 01-08-2004 à 18:36:22    

Tamahome a écrit :

2) Getchar n'est pas standard

ah bon ... ca te va pas bien de jouer au Taz

Reply

Marsh Posté le 02-08-2004 à 18:25:43    

Taz a écrit :

et que ce passe-t-il si x remplis justement une de ces conditions ?


 
Ben ça rebouclera une fois pour refaire la saisie de x, qui a une valeur invalide...
Ce while n'a strictement aucun problème, je vois pas pourquoi il rebouclerait indéfiniment... (par contre, après, ça suit pas...)

Reply

Marsh Posté le 02-08-2004 à 18:35:10    

et il se passe quoi si je tape 'a' ? et le flux n'est pas flushé d'ailleurs, alors désolé, c'est une boucle infinie à la moindre erreur, sur certains systèmes, la saisie sera réalisée avec le prompt

Reply

Marsh Posté le 02-08-2004 à 18:37:27    

Honte à moi, j'avais que des chiffres dans la tête :jap:

Reply

Marsh Posté le 03-08-2004 à 18:10:29    

Taz a écrit :

ah bon ... ca te va pas bien de jouer au Taz


 
ca va les chevilles ? :sleep:
 
Edit : j'ai confondu avec getch ()
 
Quand à scanf, et le pourquoi il ne vaut mieux pas l'utiliser, je renvoi a l'excellente FAQ de fclc : http://www.isty-info.uvsq.fr/~rume [...] 8.html#q_8


Message édité par Tamahome le 03-08-2004 à 18:13:15

---------------
Hobby eien /人◕ ‿‿ ◕人\
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed