Précédent   Forum du club des développeurs et IT Pro > C et C++ > C > Débuter
Débuter Forum d'entraide pour débuter en langage C. Avant de poster -> FAQ C
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 18/11/2012, 15h10   #1
IngenieurElec
Invité de passage
 
Femme
Inscription : novembre 2012
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : novembre 2012
Messages : 17
Points : 2
Points : 2
Par défaut Allouer un fichier de données en memoire

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:

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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <malloc.h>
 
#define NUM_Element 1000
 
 
typedef struct
{
int Index;
int N;
float d;
float W;
}ind_struct;
 
ind_struct *ind_array;
 
 
int main(void)
{
FILE *ind_struct;
int i;
 
/*Read the input data file*/
ind_struct=fopen("Data.txt","r+");
if (ind_struct==NULL)
{
printf("the input data is not ready \n");
}
 
else
{
printf("the input data is ready \n");
 
ind_array = calloc(ind_array,NUM_Element,ind_struct);
if (ind_array== NULL) nomemory("input");
 
 
for (i=0; i<1000; i++) {
fscanf(ind_struct,"%e",&ind_array[i].d);
printf("%.3E \n",ind_array[i].d);
}
}
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 un faux résultat. Quelqu’un peux m'aider à corriger ce programme?

Merci d'avance.
IngenieurElec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2012, 16h29   #2
Kirilenko
Membre émérite
 
Avatar de Kirilenko
 
Homme Lucas Pesenti
Étudiant
Inscription : décembre 2011
Messages : 234
Détails du profil
Informations personnelles :
Nom : Homme Lucas Pesenti
Âge : 16
Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2011
Messages : 234
Points : 858
Points : 858
Envoyer un message via MSN à Kirilenko
Bonjour,

Tout d'abord, il m'étonne que tu parviennes à compiler correctement le programme (où alors, à quel prix), car tu as un argument supplémentaire à l'appel de la fonction calloc. De plus, le premier paramètre est incorrect. Il doit s'agir d'une taille (typée size_t), et tu envoies un pointeur sur structure. Cette allocation a donc déjà tout de fausse.

Avec ces modifications, le code source compile, et le programme s'exécute correctement (du moins, comme je m'y attends). Peut-être devrais-tu préciser ce qui, pour toi, est un résultat faux. Pour cela, tu peux indiquer : un extrait du fichier, le résultat attendu, et le résultat obtenu. Avec ces informations, on pourra davantage t'aiguiller.

Bonne journée !
__________________
Récursivité en C : épidémie ou hérésie ?

"Pour être un saint dans l'Église de l'Emacs, il faut vivre une vie pure. Il faut se passer de tout logiciel propriétaire. Heureusement, être célibataire n'est pas obligé. C'est donc bien mieux que les autres églises" - Richard Stallman
Kirilenko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2012, 17h39   #3
IngenieurElec
Invité de passage
 
Femme
Inscription : novembre 2012
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : novembre 2012
Messages : 17
Points : 2
Points : 2
le fichier que j'ai contient des données comme les suivantes:

0 2 1.34E-04 1.07E-05
1 6 7.19E-05 6.47E-06
2 2 1.81E-04 1.36E-05

mais le résultat affiché est le suivant:

-4.316E+008
-4.316E+008
-4.316E+008
.
.
.
-4.316E+008
-4.316E+008
-2.195E-005
.
.
.
0.000E+000
0.000E+000
0.000E+000
0.000E+000
0.000E+000
IngenieurElec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2012, 18h04   #4
Kirilenko
Membre émérite
 
Avatar de Kirilenko
 
Homme Lucas Pesenti
Étudiant
Inscription : décembre 2011
Messages : 234
Détails du profil
Informations personnelles :
Nom : Homme Lucas Pesenti
Âge : 16
Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2011
Messages : 234
Points : 858
Points : 858
Envoyer un message via MSN à Kirilenko
Déjà, il faut voir comment tu as réarrangé ton code en fonction des remarques proposées. De plus, tu cherches à lire 1000 valeurs, alors qu'il y en a déjà quatre par lignes (soit 4000).
__________________
Récursivité en C : épidémie ou hérésie ?

"Pour être un saint dans l'Église de l'Emacs, il faut vivre une vie pure. Il faut se passer de tout logiciel propriétaire. Heureusement, être célibataire n'est pas obligé. C'est donc bien mieux que les autres églises" - Richard Stallman
Kirilenko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2012, 11h52   #5
IngenieurElec
Invité de passage
 
Femme
Inscription : novembre 2012
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : novembre 2012
Messages : 17
Points : 2
Points : 2
Peux tu m'expliquer d'avancer comment je peux corriger mon programme (je suis débutante avec ces types de fonction)
IngenieurElec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2012, 09h21   #6
Bktero
Modérateur
 
Avatar de Bktero
 
Ingénieur systèmes embarqués
Inscription : juin 2009
Messages : 1 821
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Ingénieur systèmes embarqués
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2009
Messages : 1 821
Points : 4 603
Points : 4 603
Ton code ne compile pas. Tu ne peux pas utiliser ind_struct comme type et comme nom de variable.

Tu utilises une fonction nommery qui semble pompée d'ailleurs. Pourquoi pas, mais les déclarations / définitions de fonctions à l'ancienne, c'est moche. Met le à jour. Un const ne serait pas mal non plus.

Kirilenko te demande de montrer ton nouveau code et met en évidence que ton exemple ne correspond au problème que tu exposes...

Poste le nouveau code et répond lui.
__________________
Si Code::Blocks vous dit undefined reference to 'socket@12', cela signifie que vous avez un problème d'édition des liens. Allez dans Projects / Build Options / Linker Settings / Add et renseigner ici les .a qui vont bien. Exemple pour les sockets : C:\Program Files\CodeBlocks\MinGW\lib\libws2_32.a

Pour les adeptes du langage SMS, allez ici et ramenez la traduction française ^^

Pour vos problèmes d'embarqué, utilisez le forum dédié !
Bktero est actuellement connecté   Envoyer un message privé Réponse avec citation 30
Vieux 20/11/2012, 12h06   #7
IngenieurElec
Invité de passage
 
Femme
Inscription : novembre 2012
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : novembre 2012
Messages : 17
Points : 2
Points : 2
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
68
69
70
#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
{
	float Index;
	float 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); 
}
IngenieurElec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2012, 12h08   #8
IngenieurElec
Invité de passage
 
Femme
Inscription : novembre 2012
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : novembre 2012
Messages : 17
Points : 2
Points : 2
J'ai essayé de modifier mon programme mais toujours je trouve une difficulté à manipuler ce type de fonction.
IngenieurElec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2012, 16h19   #9
Bktero
Modérateur
 
Avatar de Bktero
 
Ingénieur systèmes embarqués
Inscription : juin 2009
Messages : 1 821
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Ingénieur systèmes embarqués
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2009
Messages : 1 821
Points : 4 603
Points : 4 603
Oui..... et quel est ce soucis ?

Il faut nous en dire plus pour qu'on puisse t'aider.
__________________
Si Code::Blocks vous dit undefined reference to 'socket@12', cela signifie que vous avez un problème d'édition des liens. Allez dans Projects / Build Options / Linker Settings / Add et renseigner ici les .a qui vont bien. Exemple pour les sockets : C:\Program Files\CodeBlocks\MinGW\lib\libws2_32.a

Pour les adeptes du langage SMS, allez ici et ramenez la traduction française ^^

Pour vos problèmes d'embarqué, utilisez le forum dédié !
Bktero est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 16h33.


 
 
 
 
Partenaires

Hébergement Web