Modification d'un tableau dans une fonction

Fermé
shub06 - 5 déc. 2012 à 16:36
roptat Messages postés 276 Date d'inscription samedi 20 octobre 2012 Statut Membre Dernière intervention 26 juillet 2013 - 5 déc. 2012 à 17:18
Bonjour,

je souhaite écrire un programme permettant de recueillir les notes et en faire une moyenne à l'aide d'une fonction. après avoir fait celà, j'ai voulais créer une fonction qui permettrait d'ajouter une notes dans le tableau. Mais je n'arrive pas à récupérer le résultat de la fonction ajouter pour pouvoir l'utiliser dans moyenne.
Je joins les différents codes.
Merci d'avance!
#include <stdio.h>
#include <stdlib.h>
#include "vecteurfct.h"

VECTEUR.C

int main(int argc, char ** argv)
{
Tableau tab;
int i;
printf("Entrer la taille du vecteur\n");
scanf("%d",&tab.taille);
tab.notes= malloc(tab.taille*sizeof(float));
for (i=0;i<tab.taille;i++)
{
do
{
printf("Entrer une note entre 0 et 20: ");
scanf("%f",tab.notes+i);
}
while (tab.notes[i]<0 || tab.notes[i]>20);
}
moyenne(tab);
afficher(tab);
ajouter(tab);
afficher(tab);
moyenne(tab);
}

vecteurfct.h
#ifndef VECTEURFCT_H
#define VECTEURFCT_H

typedef struct Tableau
{
float *notes;
int taille;
} Tableau ;

float moyenne(Tableau tab);
float afficher(Tableau tab);
float ajouter(Tableau tab);

#endif

vecteurfct.c
#include <stdio.h>
#include <stdlib.h>
#include "vecteurfct.h"

float moyenne(Tableau tab)
{
int j;
int somme=0;
float moyenne;
for (j=0;j<tab.taille;j++)
{
somme=somme+tab.notes[j];
}
moyenne=somme/tab.taille;
printf("La moyenne vaut %f.\n",moyenne);
return moyenne;
}

float afficher(Tableau tab)
{
int i;
printf("le contenu du tableau: \n");
for (i=0;i<tab.taille-1;i++)
{
printf("%f,",tab.notes[i]);
}
printf("%f. \n",tab.notes[tab.taille-1]);
}

float ajouter(Tableau tab)
{
tab.taille++;
printf("Entrer une nouvelle note");
scanf("%f",tab.notes+(tab.taille-1));
afficher(tab);
}
A voir également:

1 réponse

roptat Messages postés 276 Date d'inscription samedi 20 octobre 2012 Statut Membre Dernière intervention 26 juillet 2013 77
5 déc. 2012 à 17:18
Oulah... Tu vas avoir des erreurs de segmentation ! Ta fonction ajouter ne vérifie pas que l'emplacement mémoire où elle écrit lui est reservé.
Il vaut mieux faire une liste chainée (ta structure contient un flotant et un pointeur vers la prochaine note, représentée par la même structure. Le pointeur peut être null s'il n'y a pas de note supplémentaires). Ou alors tu fait un free suivit d'un malloc dans la fonction ajouter.
Pour utiliser la fonction ajouter, tu dois envoyer un pointeur vers tab et non pas sa valeur. En fait, la valeur est bien entrée mais tu modifie la taille de la copie, et non de l'original. La fonction afficher s'arretera avant la fin car pour elle, la taille n'aura pas changé.
0