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 :

read/write d'un tableau de double


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 116
    Points : 62
    Points
    62
    Par défaut read/write d'un tableau de double
    Bonjour àtous,

    j'essaie de comprendre le fonctionnement des méthodes read() et write() pour écrire/lire des fichiers binaires.

    J'ai testé un petit bout de code mais j'ai un soucis.
    Tout d'abord voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    //ecriture
    const int nbpointsi = 15000;
    ooFile.write((char*)&nbpointsi,sizeof(int));
     
    double tab_init[3*nbpointsi];
    for(int i=0; i<3*nbpointsi;i++)
    {
    	tab_init[i]=(rand()/(double)RAND_MAX ) * 10.;//un nb aleatoire entre 0 et 10
    }
    ooFile.write((char*)&tab_init, 3*nbpointsi*sizeof(double));
    ooFile.close();
    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
     
    //lecture
    ifstream result;
    result.open("dbg_save0.txt",std::ios_base::in);
    if(!result.is_open())
    {
    	cout<<"impossible de lire le fichier."<<endl;
    	return 1;
    }
     
    int nbpointsr;
    result.read((char*)&nbpointsr,sizeof(int));
     
    double *tab_res=new double[3*nbpointsr];
    result.read((char*)tab_res, 3*nbpointsr*sizeof(double));
     
    for(int i=0;i<3*nbpointsr;i++)
    {
    	double x=tab_init[i];
    	double y=tab_res[i];
    	cout<<"tab_init["<<i<<"]-tab_res["<<i<<"] = "<<x-y<<endl;
    }
    result.close();
    Jusqu'au 30ème élément la différence entre les 2 tableaux est nulle (ok) par contre, ensuite mon tab_res contient des valeurs érronées (9.25..e+061,...).

    Pourtant je ne vois pas d'ou celà peut venir, je spécifie pourtant la meme taille en read et en write.

    Merci par avance de m'éclairer.

    [EDIT] Autant pour moi, je n'avais pas précisé que je lisais un fichier binaire :
    result.open("dbg_save0.txt",std::ios_base::binary);

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bonjour.

    Quand tu écris et quand tu lit tu doit envoyer une adresse aux fonctions Read et Write.
    Quand tu lit tu envois bien l'adresse du tableau à remplir qui est : tab_res
    Par contre quand tu écris tu envoie l'adresse de l'adresse du tableau : &tab_init
    En enlevant le & devant tab_init ça devrait fonctionner, puisque tab_init est l'adresse du tableau que tu manipule.

    ooFile.write((char*)&tab_init, 3*nbpointsi*sizeof(double));

    result.read((char*)tab_res, 3*nbpointsr*sizeof(double));

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 28/12/2006, 12h42
  2. Réponses: 6
    Dernier message: 15/12/2006, 20h29
  3. probleme read write serveur/client
    Par romainromain dans le forum Réseau
    Réponses: 9
    Dernier message: 22/11/2006, 17h23
  4. propriété read write
    Par new_wave dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 08/09/2006, 12h24
  5. Problème de read/write
    Par mylooz dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 25/03/2005, 20h15

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