Petit programme qui ne fonctionne pas proprement
Résolu/Fermé
geekon
Messages postés
25
Date d'inscription
lundi 9 juillet 2012
Statut
Membre
Dernière intervention
8 janvier 2016
-
Modifié par geekon le 24/02/2013 à 13:29
geekon Messages postés 25 Date d'inscription lundi 9 juillet 2012 Statut Membre Dernière intervention 8 janvier 2016 - 25 févr. 2013 à 23:35
geekon Messages postés 25 Date d'inscription lundi 9 juillet 2012 Statut Membre Dernière intervention 8 janvier 2016 - 25 févr. 2013 à 23:35
A voir également:
- Petit programme qui ne fonctionne pas proprement
- Programme demarrage windows 10 - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
- Petit 3 ✓ - Forum Word
- Excel trier du plus grand au plus petit - Guide
1 réponse
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 843
24 févr. 2013 à 15:37
24 févr. 2013 à 15:37
Bonjour,
J'ai pas tout lu car ton code est vraiment illisible.
Peux-tu le poster entre des balises "code" (à droite du bouton souligné) et de faire une belle indentation.
scanf("%d",T[i].num_poste) ;
}
while ((T[i].num_poste<0) || (T[i].num_poste>15) || (test(T,T[i].num_poste, i-1)==1) ) ;
Il faut mettre : scanf("%d", &T[i].num_poste); L'esperluette (&) est importante.
Dans le while(...); il faut faire attention. Si tu mets un point virgule à la fin, cela reviendra à : while(...) { } (sans instruction).
Il faut enlever le ; après le while si tu veux qu'il exécute les instructions suivantes.
void main ()
C'est : int main (void)
main() renvoie un int.
Il faut donc mettre également return 0;
Cdlt,
J'ai pas tout lu car ton code est vraiment illisible.
Peux-tu le poster entre des balises "code" (à droite du bouton souligné) et de faire une belle indentation.
scanf("%d",T[i].num_poste) ;
}
while ((T[i].num_poste<0) || (T[i].num_poste>15) || (test(T,T[i].num_poste, i-1)==1) ) ;
Il faut mettre : scanf("%d", &T[i].num_poste); L'esperluette (&) est importante.
Dans le while(...); il faut faire attention. Si tu mets un point virgule à la fin, cela reviendra à : while(...) { } (sans instruction).
Il faut enlever le ; après le while si tu veux qu'il exécute les instructions suivantes.
void main ()
C'est : int main (void)
main() renvoie un int.
Il faut donc mettre également return 0;
Cdlt,
Modifié par geekon le 24/02/2013 à 19:08
#include <conio.h>
#define taille 15 ;
typedef struct {
char nom [25] ;
char prenom [25] ;
float poids ;
int num_poste ;
} joueur ;
int test (joueur T[] ,int val , int N)
{
int i ;
for(i=0 ; i<N ; i++)
{
if(T[i].num_poste == val)
return 1 ;
}
return 0 ;
}
void saisie (joueur T[])
{ int i ;
for(i=0 ;i<15 ; i++)
{
do
{
printf("donner le numero du joueur \n") ;
scanf("%d",&T[i].num_poste) ;
}
while ((T[i].num_poste<0) || (T[i].num_poste>15) || (test(T,T[i].num_poste, i-1)==1) ) ;
printf("donner le nom du joueur \n") ;
scanf("%s",T[i].nom ) ;
printf("donner le prenom du joueur \n") ;
scanf("%s",T[i].prenom) ;
do
{
printf("donner le poids du joueur \n") ;
scanf("%2.f", T[i].poids) ;
}
while (T[i].poids<0) ;
}
for (i=0;i< 15 ;i++)
{
printf("joueur num %d%s%s%.2f \n", T[i].num_poste , T[i].nom , T[i].prenom , T[i].poids) ;
}
}
void Max_poids (joueur T[])
{
float max=T[0].poids ;
float S= T[0].poids ;
int i ;
int pos ;
for (i=0 ;i<15 ; i++)
{
if (T[i].poids > max )
{
max = T[i].poids ;
pos = i ;
}
S= S+ T[i].poids ;
}
printf("les coordonnés du joueur le plus lourd sont %d%s%s%.2f \n", T[pos].num_poste , T[pos].nom ,T[pos].prenom , T[pos].poids) ;
printf("la moyenne des poids est %.2f", (S/15) ) ;
}
void main ()
{char c;
joueur tab [15] ;
saisie(tab) ;
Max_poids(tab) ;
c=getchar();
}
Merci pour votre réponse et désolé,
j'ai corriger le scanf("%d",&T[i].num_poste) et le problème de la boucle de numéro de joueur est résolu mais, quand le programme arrive au 2ème joueur il affiche deux fois "donner le numero du joueur" et meme si je met le meme numéro qu'au premier joueur il passe et ne repéte pas l'instruction
do
{
printf("donner le numero du joueur \n") ;
scanf("%d",&T[i].num_poste) ;
}
while ((T[i].num_poste<0) || (T[i].num_poste>15) || (test(T,T[i].num_poste, i-1)==1) ) ;
pour le ; aprés le while(...)';' j'ai pas bien compris si je l'enlève ça me donne ça: "expected ';' before 'printf'', je suis sous codeblocks.
Merci encore.
24 févr. 2013 à 19:21
Je les remets :
void main ()
C'est : int main (void)
main() renvoie un int.
Il faut donc mettre également return 0;
Et puis surtout : Peux-tu le poster entre des balises "code" (à droite du bouton souligné) et de faire une belle indentation. Sinon c'est illisible...
Autre remarque :
scanf("%2.f", T[i].poids) ;
Tu as oublié l'esperluette (&).
pour le while, essaie en enlevant le ; et en mettant entre accolade le groupe d'instruction que tu veux répéter.
Et ce qui serait sympa aussi, ça serait de mettre les warning et messages d'erreur de ton compilateur en indiquant à quelle ligne cela se rapporte :-).
25 févr. 2013 à 21:03
1)error: expected ';' before 'printf': ici (sur la ligne de printf):
2)warning:unkown convertion type character '.' in format: ici (sur la ligne de scanf):
3) warining: too many arguments for format meme ligne que 2
4)error: expected ';' before 'printf': ici (sur la ligne de l'accolade):
5) warning:'main' is normally a non-static function (sur la ligne: int main(void).
6)expected declaration or statement at end of input (sur ma dernière ligne).
Merci.
25 févr. 2013 à 21:34
J'avais pas vu le do 3 lignes plus haut. C'est pour ça qu'il faut systématiquement poster son code entre deux balises code en indentant (toi tu as mis gras)...
#define taille 15 ;
Surtout pas de point virgule après un #define
scanf("%2.f", &T[i].poids) ;
Mets plutôt : "%f"
Corrige, recompile, reposte (par pitié, le bouton code (à droite de souligné)) et remets les messages d'erreur / warning du compilateur.
Modifié par geekon le 25/02/2013 à 21:56
aprés la correction ici scanf("%f", &T[i].poids) ; "donner le numero du joueur" ne s'affiche plus 2 fois pour le deuxième joueur mais si je mets le meme numero il passe au nom et prenom... alors qu'il faut qu'il repete ça:
mais au 3éme joueur si je mets le meme numero il les repete (pourquoi il ne reconnai pas que c'est le meme numero depuis le 2éme joueur),
pas d'erreurs ni de warnings maintenant.
j'ai mis les balises de code seulement, désolé encore et surtout merci.