IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Allouer un fichier de données en memoire


Sujet :

C

  1. #1
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Novembre 2012
    Messages : 19
    Points : 13
    Points
    13
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre éclairé
    Avatar de Kirilenko
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 234
    Points : 807
    Points
    807
    Par défaut
    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

  3. #3
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Novembre 2012
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    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

  4. #4
    Membre éclairé
    Avatar de Kirilenko
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 234
    Points : 807
    Points
    807
    Par défaut
    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

  5. #5
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Novembre 2012
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    Peux tu m'expliquer d'avancer comment je peux corriger mon programme (je suis débutante avec ces types de fonction)

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    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.

  7. #7
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Novembre 2012
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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); 
    }

  8. #8
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Novembre 2012
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    J'ai essayé de modifier mon programme mais toujours je trouve une difficulté à manipuler ce type de fonction.

  9. #9
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Oui..... et quel est ce soucis ?

    Il faut nous en dire plus pour qu'on puisse t'aider.

Discussions similaires

  1. Convertir un fichier de données quelconque en un fichier XML
    Par cari dans le forum XML/XSL et SOAP
    Réponses: 10
    Dernier message: 06/06/2005, 18h11
  2. [C#] [.NET CF] des fichiers de données avec l'application
    Par safisoft13 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 06/06/2005, 09h30
  3. Fichier de données
    Par Philippe LE PONT dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 05/08/2004, 11h28
  4. [Fichier] Récupérer donnée d'un fichier
    Par johnlehardos dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 11/05/2004, 13h42
  5. Comparer des fichiers de données : Quel Langage ?
    Par Anonymous dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 24/04/2002, 22h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo