Petit programme qui ne fonctionne pas proprement
Résolu
geekon
Messages postés
25
Date d'inscription
Statut
Membre
Dernière intervention
-
geekon Messages postés 25 Date d'inscription Statut Membre Dernière intervention -
geekon Messages postés 25 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Petit programme qui ne fonctionne pas proprement
- Comment fermer un programme qui ne répond pas - Guide
- Programme demarrage windows - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
- Trier du plus petit au plus grand excel - Guide
- Programme bonjour - Forum Windows
1 réponse
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,
#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.
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 :-).
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.
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.
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.