A voir également:
- Erreur Programme en c
- Erreur 0x80070643 - Accueil - Windows
- Programme demarrage windows 10 - Guide
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Erreur 1001 outlook - Accueil - Bureautique
- Désinstaller programme windows 10 - Guide
8 réponses
Bonjour
Tu n'as pas d'erreur ? avec le programme ci-dessus ?
Avec une déclaration struct etudiant moy[nbEtudiant]; où nbEtudiant est une variable
Et j'en passe
Donne une copie de ton vrai programme, celui ci ne doit être accepté par aucun compilateur.
Tu n'as pas d'erreur ? avec le programme ci-dessus ?
Avec une déclaration struct etudiant moy[nbEtudiant]; où nbEtudiant est une variable
Et j'en passe
Donne une copie de ton vrai programme, celui ci ne doit être accepté par aucun compilateur.
C'est la vrai version de mon programme...
je compile avec lcc win 32, et j'arrive a voir ma structure, entrer le nom, prenom, age et note des etudiants.
Je comprends pas très ce que j'aurais du mettre à la place de struct etudiant moy[nbEtudiant];
c'est mon 1er programme donc j'ai bcp de mal lol
Merci par avance
je compile avec lcc win 32, et j'arrive a voir ma structure, entrer le nom, prenom, age et note des etudiants.
Je comprends pas très ce que j'aurais du mettre à la place de struct etudiant moy[nbEtudiant];
c'est mon 1er programme donc j'ai bcp de mal lol
Merci par avance
Toutes mes excuses, c'est contraire à ce que j'ai toujours connu du C. La dimension d'in tableau DOIT être une constante, tu mets une variable.
Donc, admettons que LCC accepte les tableaux de dimension variable. ce n'est plus du C mais passons
Il reste (au moins) deux remarques
1 - Quand tu définis un tableau moy[nbEtudiant] tu as droit d'utiliser moy[0] .. moy[nbEtudiant-1]
moy[nbEtudiant], c'est en dehors de ton tableau. très bien pour planter
2 - for(int i=0;i<nbEtudiant;i++){
total = total + moy[i].note;
mais les moy[i] n'ont jamais été initialisés ! tu n'as affecté que moy[nbEtudiant]. Il faut que tu passes à ta fonction la totalité du tableau, pas seulement un élément.
Donc, admettons que LCC accepte les tableaux de dimension variable. ce n'est plus du C mais passons
Il reste (au moins) deux remarques
1 - Quand tu définis un tableau moy[nbEtudiant] tu as droit d'utiliser moy[0] .. moy[nbEtudiant-1]
moy[nbEtudiant], c'est en dehors de ton tableau. très bien pour planter
2 - for(int i=0;i<nbEtudiant;i++){
total = total + moy[i].note;
mais les moy[i] n'ont jamais été initialisés ! tu n'as affecté que moy[nbEtudiant]. Il faut que tu passes à ta fonction la totalité du tableau, pas seulement un élément.
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
6 déc. 2007 à 12:40
6 déc. 2007 à 12:40
Moi ça me choc pas la déclaration du tableau avec un int passer en paramètre. Mais bon...
en effet, il y a un problème avec ta fonction. Son proto devrait plutôt être :
float calculMoyenne( struct etudiant* Moyennes,int nbEtudiant)
et ensuite :
for (int i=0;i<nbEtudiant;i++) total+=Moyennes[i].note;
voila, en espérant que ça t'aide a+
en effet, il y a un problème avec ta fonction. Son proto devrait plutôt être :
float calculMoyenne( struct etudiant* Moyennes,int nbEtudiant)
et ensuite :
for (int i=0;i<nbEtudiant;i++) total+=Moyennes[i].note;
voila, en espérant que ça t'aide a+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Moi ça me choc pas la déclaration du tableau avec un int passer en paramètre
Il est vrai que pour mettre un nom (choc) à la place d'un verbe (choque), tu dois avoir l'habitude de torturer la syntaxe ;-)
J'ai lu un certain nombre de manuels de référence C. TOUS disent que ça doit être une constante. Je n'ai pas dû lire les bons
Un rapide essai sur mon VC++ (des fois que je me serais encore trompé) me jette avec une erreur "taille inconnue".
Il est vrai que pour mettre un nom (choc) à la place d'un verbe (choque), tu dois avoir l'habitude de torturer la syntaxe ;-)
J'ai lu un certain nombre de manuels de référence C. TOUS disent que ça doit être une constante. Je n'ai pas dû lire les bons
Un rapide essai sur mon VC++ (des fois que je me serais encore trompé) me jette avec une erreur "taille inconnue".
j'ai revu mon probleme et j'obtiens cela :
#include <stdio.h>
struct etudiant {
char nom [32] ;
char prenom [32] ;
int age ;
float note ;
};
// fonction moyenne
float calculMoyenne(float total, int N){
float average;
average = total/N;
return average;
}
int main () {
//float moyenne;
int N, i, j, k, indMin, age;
float total, average;
//float moyenne;
//struct etudiant aide[1], aide2[1];
// enregistrement
//declaration de la fonction moyenne
//float moyenne (int N, struct etudiant tab);
FILE *myfile;
struct etudiant tab[N];
printf("saisir le nombre d'etudiant \n");
scanf("%d", &N) ;
//remplissage du tableau des N etudiants
myfile = fopen("etudiant.txt", "w+");
for(i=0;i<N;i++) {
//printf - sortie a l'ecran
printf("Etudiant numero [%d]\n", i+1);
printf("Saisir Nom: ");
scanf("%s", &tab[i].nom);
printf("Saisir Prenom: ");
scanf("%s", &tab[i].prenom);
printf("Saisir Age: ");
scanf("%d", &tab[i].age);
printf("Saisir Note de l'Etudiant: ");
scanf("%f", &tab[i].note);
//fprintf - ecriture dans le fichier
fprintf(myfile,"%s, %s, %d, %f\n", tab[i].nom, tab[i].prenom, tab[i].age, tab[i].note) ;
}
for(i=0;i<N;i++)
total+= tab[i].note;
average = calculMoyenne(average, N);
printf ("valeur de la moyenne de la classe : %f\n", average);
return 0;
}
cependant j'ai un warning en ce qui concerne" total+= tab[i].note;"
j'ai du mal écrire qqch, mais je ne trouve pas! :( je désespère
#include <stdio.h>
struct etudiant {
char nom [32] ;
char prenom [32] ;
int age ;
float note ;
};
// fonction moyenne
float calculMoyenne(float total, int N){
float average;
average = total/N;
return average;
}
int main () {
//float moyenne;
int N, i, j, k, indMin, age;
float total, average;
//float moyenne;
//struct etudiant aide[1], aide2[1];
// enregistrement
//declaration de la fonction moyenne
//float moyenne (int N, struct etudiant tab);
FILE *myfile;
struct etudiant tab[N];
printf("saisir le nombre d'etudiant \n");
scanf("%d", &N) ;
//remplissage du tableau des N etudiants
myfile = fopen("etudiant.txt", "w+");
for(i=0;i<N;i++) {
//printf - sortie a l'ecran
printf("Etudiant numero [%d]\n", i+1);
printf("Saisir Nom: ");
scanf("%s", &tab[i].nom);
printf("Saisir Prenom: ");
scanf("%s", &tab[i].prenom);
printf("Saisir Age: ");
scanf("%d", &tab[i].age);
printf("Saisir Note de l'Etudiant: ");
scanf("%f", &tab[i].note);
//fprintf - ecriture dans le fichier
fprintf(myfile,"%s, %s, %d, %f\n", tab[i].nom, tab[i].prenom, tab[i].age, tab[i].note) ;
}
for(i=0;i<N;i++)
total+= tab[i].note;
average = calculMoyenne(average, N);
printf ("valeur de la moyenne de la classe : %f\n", average);
return 0;
}
cependant j'ai un warning en ce qui concerne" total+= tab[i].note;"
j'ai du mal écrire qqch, mais je ne trouve pas! :( je désespère
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
6 déc. 2007 à 18:06
6 déc. 2007 à 18:06
c'est total qu'il faut metre et pas average lors de l'appel de ta fonction
average = calculMoyenne(total, N);
deadstar
>
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
6 déc. 2007 à 18:37
6 déc. 2007 à 18:37
J'ai fait ce que tu m'as dit, mais il reste toujours le warning pour total+= tab[i].note;
Je ne peux donc pas utiliser mon programme :s
je sais pas trop quoi faire, vu que je ne m'y connais pas trop
Je ne peux donc pas utiliser mon programme :s
je sais pas trop quoi faire, vu que je ne m'y connais pas trop
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
>
deadstar
6 déc. 2007 à 18:48
6 déc. 2007 à 18:48
avec un warning tu peux comme meme executer(evidemment c'est mieux de pas en avoir) c'est seulement avec une erreur que c'est pas possible essaye
moi perso mon compilateur ne me donne pas de warning pour cette ligne
moi perso mon compilateur ne me donne pas de warning pour cette ligne
deadstar
>
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
6 déc. 2007 à 18:50
6 déc. 2007 à 18:50
oui je sais, mais quand je l'execute le prog plante ...
je sais pas si c'est du au warning ou non :s
je sais pas si c'est du au warning ou non :s
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
>
deadstar
6 déc. 2007 à 18:56
6 déc. 2007 à 18:56
si ça segfault c'est peut etre du a un probleme de memoire essaye de faire un malloc comme te la conseillé kyann
en tout cas chez moi ton programme marche bien quand je met total dans l'appel
en tout cas chez moi ton programme marche bien quand je met total dans l'appel
saisir le nombre d'etudiant 2 Etudiant numero [1] Saisir Nom: E Saisir Prenom: R Saisir Age: 4 Saisir Note de l'Etudiant: 5 Etudiant numero [2] Saisir Nom: E Saisir Prenom: R Saisir Age: 9 Saisir Note de l'Etudiant: 10 valeur de la moyenne de la classe : 7.500000 Process returned 0 (0x0) execution time : 13.721 s Press any key to continue.
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
6 déc. 2007 à 15:12
6 déc. 2007 à 15:12
Tu déclare ton tableau avant d'initialiser N, c'est normal qu'il ne soit pas content.
Dimensionner un tableau par une variable : soit, mais bon, il faudrai quand même penser à lui donner une valeur !
Pour le reste je ne voi pas de grosse faute. Attention tout de même dans ta fonction à la division d'un float par un entier, ça peut poser des problèmes.
préfère total/float(N).
Pour le etudiant tab [N]; en effet, mon livre de C++ précise bien que N doit être constant. Enfin, on peut imaginer que le compilo est capable de générer un malloc directement (sans pour autant que ça soit standard)
Dimensionner un tableau par une variable : soit, mais bon, il faudrai quand même penser à lui donner une valeur !
Pour le reste je ne voi pas de grosse faute. Attention tout de même dans ta fonction à la division d'un float par un entier, ça peut poser des problèmes.
préfère total/float(N).
Pour le etudiant tab [N]; en effet, mon livre de C++ précise bien que N doit être constant. Enfin, on peut imaginer que le compilo est capable de générer un malloc directement (sans pour autant que ça soit standard)
déclare un pointeur pour ton tableau au lieu de cette déclaration originale, tu fais du C pas du PHP.
J'ai jms eu besoin de le faire et je peux pas tester mais ça devrait marcher (tetre avec un bout de code en plus pour utiliser le sizeof sur la structure):
// déclaration
struct etudiant *tab;
// saisie
printf("saisir le nombre d'etudiant \n");
scanf("%d", &N) ;
// allocation mémoire
tab = malloc(N*sizeof(etudiant));
J'ai jms eu besoin de le faire et je peux pas tester mais ça devrait marcher (tetre avec un bout de code en plus pour utiliser le sizeof sur la structure):
// déclaration
struct etudiant *tab;
// saisie
printf("saisir le nombre d'etudiant \n");
scanf("%d", &N) ;
// allocation mémoire
tab = malloc(N*sizeof(etudiant));