Appels de fonctions et tableaux

Fermé
arnaudtchana Messages postés 6 Date d'inscription lundi 15 juillet 2013 Statut Membre Dernière intervention 21 juillet 2014 - 18 juil. 2013 à 14:02
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 18 juil. 2013 à 21:07
salut et merci d'avance pour votre disponibilité.en fait j'ai écrit un code en c dans codeblock qui demande à l'utilisateur de rentrer des valeurs dans un tableau puis après appel d'une fonction calculmoy je veux renvoyer la moyenne des valeurs entrées dans le tableau.Mais il se trouve que lorsque j'exécute mon programme et j'entre les deux premières valeurs de mon tableau je reçoit un message disant que mon projet a cessé de fonctionner.voici mes codes;MERCI UNE FOIS DE PLUS






MAIN.C
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#include "moyennetab.h"


int main()
{
double tab[5],moyenne=0;
int j=0;
for(j=0;j<5;j++)
{
printf("veillez entrer la valeur %ld de votre tableau",j+1);
scanf("%d",tab[j]);
}
moyenne=calculmoyennetab(tab, 5);
printf("la moyenne des elements de votre tableau est %d",moyenne);
}








FOCTION CALCULMOYTAB.C
#include <stdio.h>
#include <stdlib.h>
#include <math.h>


double calculmoyennetab(long tableau[],long tailletableau)
{
double som=0,moy=0;
int i=0;
for(i=0;i<5;i++)
{
som=som + tableau[i];
}
moy=som/5;
return moy;
}









HEADER MOYENNETAB.H
double calculmoyennetab(long tableau[],long tailletableau);

3 réponses

BadGamer Messages postés 517 Date d'inscription mercredi 24 novembre 2010 Statut Membre Dernière intervention 25 décembre 2014 132
18 juil. 2013 à 14:14
Bon alors j'ai une solution pour toi mais le calcul ne marche pas...je te la donne quand même:

Créer une variable K de type double et dans ton scanf fait :

printf("veillez entrer la valeur %d de votre tableau \t",j+1);
fflush(stdin);
scanf("%d",&k);
tab[j]=k;


Le fflush(stdin); vide ton buffer j'ai eut énormement de problemes avec
1
arnaudtchana Messages postés 6 Date d'inscription lundi 15 juillet 2013 Statut Membre Dernière intervention 21 juillet 2014
18 juil. 2013 à 14:44
Merci ça marche mais le résultat est un chiffre énorme qui n'a rien à voir avec la moyenne des éléments que j'entre ;on dirait que ça fait la moyenne des adresses je ne sais pas s'il vous plait si j'ai bien utilisé les pointeurs.excusez moi encore mais je sais pas trop ce que c'est le fflush(stdin).merci d'avance
0
BadGamer Messages postés 517 Date d'inscription mercredi 24 novembre 2010 Statut Membre Dernière intervention 25 décembre 2014 132
Modifié par BadGamer le 18/07/2013 à 15:08
Je t'ai envoyé la correction que j'ai fait, bien que je te conseille de remplacer ton 5 par une constante.
Si il y a des passage que tu ne comprend pas n'hésite pas a demander, par contre le flush dit toi de toujours mettre ça avant un scanf ça t'evitera des problemes
0
arnaudtchana Messages postés 6 Date d'inscription lundi 15 juillet 2013 Statut Membre Dernière intervention 21 juillet 2014
18 juil. 2013 à 15:17
merci une fois de plus mais le résultat est toujours incompréhensible ce n'est pas une valeur moyenne que ça me renvoie meme avec votre code
0
BadGamer Messages postés 517 Date d'inscription mercredi 24 novembre 2010 Statut Membre Dernière intervention 25 décembre 2014 132
Modifié par BadGamer le 18/07/2013 à 15:51
Tu entres des entiers ? Moi ça marche impecable
http://s15.postimg.org/tvfjq5vuj/Capture.png
0
BadGamer Messages postés 517 Date d'inscription mercredi 24 novembre 2010 Statut Membre Dernière intervention 25 décembre 2014 132
18 juil. 2013 à 14:53
#include <stdio.h>
#include <stdlib.h>
#include <math.h>


float moyenneT(int *tab);
int main()
{
int k=0;
int tab[5];
int j=0;
float moyenne;
for(j=0;j<5;j++)
{
printf("veillez entrer la valeur %d de votre tableau \t",j+1);
fflush(stdin);
scanf("%d",&k);
tab[j]=k;
}

moyenne=moyenneT(tab);
printf("la moyenne des elements de votre tableau est %f",moyenne);
}

float moyenneT(int *tab)
{
    float moyenne=0;
    int i=0;
    int somme=0;
    for (i=0;i<5;i++)
    {
        somme=somme+tab[i];
    }
    moyenne=somme/5;
    return moyenne;

}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
18 juil. 2013 à 21:07
Bonjour,

@arnaudtchana,

printf("veillez entrer la valeur %ld de votre tableau",j+1);
j est de type int. Il faut donc mettre : printf("...%d...",j+1); (et non "%ld").

scanf("%d",tab[j]);
Deux erreurs :
1. tab[j] est de type double alors que tu demandes à scanf la saisie d'un int. Il faut que ça soit cohérent.
2. Il faut mettre l'adresse de la variable, pas la variable elle-même.

Ce qui donne : scanf("%lf",&tab[j]); ou scanf("%lf",tab+j);
Si tu veux garder "%d", alors il faudra mettre : int tab[5];

double calculmoyennetab(long tableau[],long tailletableau)
Attention, tu dis que tableau est un tableau de long ici alors qu'ailleurs tu as mis que c'était un tableau de double. Il faut que tout soit cohérent.


printf("la moyenne des elements de votre tableau est %d",moyenne);
moyenne est de type double. Il faut donc mettre : printf("...%f...", moyenne) (et non "%d").
De plus, je te conseille de mettre \n ou alors il faudra mettre fflush(stdout);

Et enfin, n'oublie pas le return 0; final.

@BadGamer,
fflush(stdin) => A ne pas utiliser : comportement indéfini.
De plus, le flush clavier doit se réaliser après une fonction de lecture (si un '\n' est encore dans le buffer) et non avant comme tu as mis.
Ici, ce n'est pas vraiment obligatoire puisqu'il ne lit que des entiers. Donc, ne compliquons pas la chose :-).
Sinon pour info, la purge clavier se fait comme ceci :
{
     int c;
     while( (c=getchar()) != '\n' && c != EOF );
}


Cdlt,
0