Allouer un fichier de donnée

Fermé
mouna1985 Messages postés 31 Date d'inscription dimanche 29 mars 2009 Statut Membre Dernière intervention 13 novembre 2016 - Modifié par mouna1985 le 20/11/2012 à 12:19
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 21 nov. 2012 à 10:14
Bonjour,

Je suis entrain d'écrire un programme qui permet de définir une structure.
Cette structure sera par la suite utilisé pour lire un fichier de donnée ( 4 colonne et 1000 lignes). Par la suite je veux allouer ces données en mémoire pour y travailler par la suite.

le programme est le suivant:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <malloc.h>
 
#define NUM_IND 4000
#define MAX_lignes 1000
 
/*definition of the input data structure*/
typedef struct
{
	int Index;
	int N;
	float d;
	float w;
}ind_struct;
 
ind_struct *ind_array;
 
 
int main(void)
{
	FILE *input_data;
	int i;
 
	/*Read the input data file and the test data file*/
	input_data=fopen("data.txt","r+");
	if (input_data==NULL)
	{
		printf("the input data is not ready \n");
	}
 
	else
	{
		printf("the input data is ready \n");
 
		ind_array = (ind_struct *) calloc (NUM_IND, sizeof(ind_struct));
		if (ind_array== NULL) nomemory("input");
 
		else
		{
 
			for (i=0; i<MAX_lignes; i++) {
 
				fscanf(input_data,"%e",&ind_array[i].Index);
				fscanf(input_data,"%e",&ind_array[i].N);
				fscanf(input_data,"%e",&ind_array[i].d);
				fscanf(input_data,"%e",&ind_array[i].w);
				printf("%.f  %.f  %.3E  %.3E \n",ind_array[i].Index,ind_array[i].N,ind_array[i].d,ind_array[i].w);
			}
		}
 
 
 
	}
	return 0;
}
 
 
/*====================================================================
Prints an error message and terminates the program
====================================================================*/
nomemory(string) 
char *string; 
{ 
	printf("\nmalloc: out of memory making %s!!\n",string); 
	printf("\n Program is halting .....");
	exit(-1); 
}



Le code m'affiche de un faux résultat. Quelqu'un peux m'aider à corriger ce programme?

Merci d'avance.
A voir également:

2 réponses

mouna1985 Messages postés 31 Date d'inscription dimanche 29 mars 2009 Statut Membre Dernière intervention 13 novembre 2016 3
20 nov. 2012 à 12:24
Merci de me répondre, c'est urgent
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 20/11/2012 à 14:42
Salut mouna1985,

Si tes deux premières colonnes sont des entiers, comme suggéré par ta structure, c'est plutôt comme cela, il me semble :

    fscanf(input_data,"%d",&ind_array[i].Index); 
    fscanf(input_data,"%d",&ind_array[i].N); 
    fscanf(input_data,"%e",&ind_array[i].d); 
    fscanf(input_data,"%e",&ind_array[i].w); 
    printf("%d  %d  %.3E  %.3E \n",ind_array[i].Index, 
      ind_array[i].N,ind_array[i].d,ind_array[i].w);


Voir les spécificateurs là :

http://www.cplusplus.com/reference/cstdio/fscanf/
http://www.cplusplus.com/reference/cstdio/printf/


Dal
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 21/11/2012 à 10:16
J'ignore quel compilateur tu utilises, mais tu devrais compiler tes programmes avec affichage des avertissements (warnings).

En testant ton code avec le compilateur gcc et l'option -Wall affichant tous les warnings, le compilateur t'indique où se trouvent de potentielles erreurs sous la forme d'avertissements. Ce ne sont pas des erreurs de compilation, mais le compilateur se doute que ce tu fais ne va probablement pas produire le résultat attendu (à moins que tu saches très bien ce que tu fais).

En règle générale, il faut mieux toujours compiler avec les avertissements, comprendre tous les avertissements, et en éliminer la cause (qui dans la quasi totalité des cas est bien une erreur ou en tout cas une incohérence).

Une bonne pratique est aussi de passer sur ton code un programme de type "lint", qui va aller plus loin dans l'analyse statique du code. Sous Linux, il y a aussi Valgrind, qui va analyser l'exécution du code de façon dynamique, utile pour de nombreuses choses, car il est modulaire, mais surtout connu pour la recherche de problèmes liés à la gestion de la mémoire et le profilage.


Dal
0