Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2704 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] Programme simple...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Programme simple...

n°812020
nicolas
Posté le 31-07-2004 à 18:03:13  profilanswer
 

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

mood
Publicité
Posté le 31-07-2004 à 18:03:13  profilanswer
 

n°812021
Taz
bisounours-codeur
Posté le 31-07-2004 à 18:10:18  profilanswer
 

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
n°812142
joelan
Posté le 01-08-2004 à 00:10:27  profilanswer
 

lol


---------------
job
n°812172
thermoclin​e
Geek intelligent
Posté le 01-08-2004 à 01:52:35  profilanswer
 

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

n°812174
Taz
bisounours-codeur
Posté le 01-08-2004 à 02:11:35  profilanswer
 

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.

n°812177
thermoclin​e
Geek intelligent
Posté le 01-08-2004 à 02:36:53  profilanswer
 

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

n°812180
Taz
bisounours-codeur
Posté le 01-08-2004 à 03:19:37  profilanswer
 

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

n°812182
chrisbk
-
Posté le 01-08-2004 à 03:30:04  profilanswer
 

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

n°812187
thermoclin​e
Geek intelligent
Posté le 01-08-2004 à 05:28:45  profilanswer
 

Pas mieux

n°812357
Tamahome
⭐⭐⭐⭐⭐
Posté le 01-08-2004 à 17:50:50  profilanswer
 

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é.

mood
Publicité
Posté le 01-08-2004 à 17:50:50  profilanswer
 

n°812358
Tamahome
⭐⭐⭐⭐⭐
Posté le 01-08-2004 à 17:51:37  profilanswer
 

Taz a écrit :

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


 
while(1)  :whistle:

n°812379
Taz
bisounours-codeur
Posté le 01-08-2004 à 18:36:22  profilanswer
 

Tamahome a écrit :

2) Getchar n'est pas standard

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

n°812961
leneuf22
Posté le 02-08-2004 à 18:25:43  profilanswer
 

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...)

n°812964
Taz
bisounours-codeur
Posté le 02-08-2004 à 18:35:10  profilanswer
 

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

n°812965
leneuf22
Posté le 02-08-2004 à 18:37:27  profilanswer
 

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

n°814000
Tamahome
⭐⭐⭐⭐⭐
Posté le 03-08-2004 à 18:10:29  profilanswer
 

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 /人◕ ‿‿ ◕人\

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] Programme simple...

 

Sujets relatifs
Optimisation requete simpleBouton de "validation" et structure du programme.
question toute simple d'un nioub en la matiere... =)Montrer que le programme s'exécute dans une interface utilisateur
[js]modification toute simple:affichage dans une frameOuvrir un logiciel exterieur au programme
Faire un programme simple en c++Concatenation super simple de chaine de caractere
Programme en ligne de commande avec delphi possible? 
Plus de sujets relatifs à : [C] Programme simple...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR