Aide aux allocations dynamiques
Bonjour à tous,
je sollicite votre aide afin de m'aider dans une amélioration de mon programme.
Ce programme récupère en fait une liste de données dans un fichier texte.
J'ai donc créé une structure dont le type est appelé trace. Elle contient un titre (comment) un nombre de points affiché, et deux colonnes de valeurs.
Le fichier marche très bien, je peux le lire et l'afficher dans une console.
Ce que j'aimerai pour l'améliorer c'est de créer une structure de ce type:
Code:
1 2 3 4 5 6
| typedef struct{
char comment[40];
int nbpts;
float *time;
float *value;
} trace; |
et par le fait utiliser des allocations dynamiques. mais je n'ai pas très bien saisi la subtilité.
Si vous pouviez m'aider dans les démarches se serait cool :)
Je vous ai joins le code que j'ai créé auparavant.
merci d'avance.
Skanino
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| #include<stdio.h>
#include<stdlib.h>
#define POINTS 4096
typedef struct{
char comment[40];
int nbpts;
float time[POINTS];
float value[POINTS];
} trace;
void readTrace(char* fichier,trace* uneTrace);
void printTrace(trace* uneTrace);
void main()
{
trace uneTrace; /*on défini le type trace pour la variable uneTrace*/
int t=0;/*
FILE* pf;
pf=fopen("cell2.txt","r");*/
readTrace("cell2.txt",&uneTrace); /*appel de la fonction en envoyant le fichier txt et l'adresse de la variable*/
printf("Tester la fonction print tape 1\n\t");
scanf("%d",&t);
if (t==1)
printTrace(&uneTrace);
else
printf("\ntu veux rien faire\n");
}
void readTrace(char* fichier,trace* uneTrace)
{
int i=0;
FILE* pf;
pf=fopen(fichier,"r"); /*ouverture du fichier envoyé par la fonction dans le main, ici cell2.tx*/
if(pf!=NULL) /*si le fichier est bien lu on applique la lecture*/
{
fscanf(pf,"%s",uneTrace->comment); /*lecture du titre*/
fscanf(pf,"%d",&(uneTrace->nbpts)); /*nombre d'éléments*/
for(i=0;i<(uneTrace->nbpts);i++)
{
fscanf(pf,"%f",&(uneTrace->time[i])); /*valeure num1 du tableau*/
fscanf(pf,"%f",&(uneTrace->value[i])); /*valeure num2 du tableau*/
}
printf("c ok\n\n");
}
else
printf("c pas ok");
fclose(pf);
}
void printTrace(trace* uneTrace) /*avec cette fonction on va pouvoir afficher les valeures lues*/
{
int i=0;
printf("%s\n",uneTrace->comment);
printf("\t%d\n",uneTrace->nbpts);
for(i=0;i</*(uneTrace->nbpts)*/15;i++) /*on affiche que les premiers éléments pour l'instant*/
{
printf("t=%.1f\t",uneTrace->time[i]);
printf("v=%.3f\n",uneTrace->value[i]);
}
} |