begin process at 2012 05 30 02:15:39
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Je dois halluciner


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Je dois halluciner

mardi 19 avril 2005 à 20:02:42 | Je dois halluciner

luhtor

J'ai bricoler quelque programme pour écriture lecture de fichier binaire. Si quelqu'un peut m'expliquer ce qui se passe.

Voila un programme tout simple qui écrit test et test2 dans un fichier binaire puis j'ouvre le fichier que je viens de créer et je vérifie que les deux valeurs sont bien enregistrées. Jusque la tout va bien.

#include <fstream>
#include <iostream>
using namespace std;
int main()
{
  ifstream fichier_in;
  ofstream fichier_out;
   
  float test = 1.619f;
  float test2 = 1.619f; 
 
  fichier_out.open("adata", ios::out | ios::binary | ios::trunc);
  fichier_out.write((char*)(&test), 4);
  fichier_out.write((char*)(&test2), 4);
  fichier_out.close();
 
  system("PAUSE");
  float value1;
  float value2;

  fichier_in.open("adata", ios::in | ios::binary);
  fichier_in.read((char*)(&value1), 4);
  fichier_in.read((char*)(&value2), 4);
  cout << value1 << " " << value2 << endl;

  fichier_in.close();
  system("PAUSE");
  return(0);
}

Voici la sortie:
Appuyez sur une touche pour continuer...
1.619 1.619
Appuyez sur une touche pour continuer...

Le problème vient ensuite, j'ai fais un autre programme avec stdio.h qui lit de la meme facon:

#include <stdio.h>
#include <iostream>

using namespace std;
int main()
{
    FILE *file = fopen("adata" , "r"); // il semble que "rb" ne soit pas nécessaire.
  
    float val[2];
    fseek(file, 0, SEEK_SET);
    fread(&val, 4, 2, file);
    cout << val[0] << endl;
    cout << val[1] << endl;
    fclose(file);
    system("PAUSE");
}

Voici la sortie:
1.619
1.619
Appuyez sur une touche pour continuer...

Donc tout va bien, si vous pouvez essayer maintenant avec
  float test = 1.618f;
  float test2 = 1.618f; 

puis réexécuter le premier programme puis le second, voila ce que j'obtiens:
2.24208e-043
3.21412e-039
Appuyez sur une touche pour continuer...

Bien sur si on précise que l'on lit en binaire dans le deuxième programme
FILE *file = fopen("adata" , "rb");
Tout rentre dans l'ordre, mais pourquoi ce bug pour ce nombre ? Alors que j'ai pas pu trouver un autre nombre pour lequel ca buggait de la meme facon.

Si quelqu'un a deux minutes pour tester chez lui, et me faire part des résultats, je suis curieux:)

mardi 19 avril 2005 à 22:51:43 | Re : Je dois halluciner

bayeto

Membre Club
En effet il FAUT mettre "rb" lorsqu'on lit du binaire sinon c'est du texte.
mardi 19 avril 2005 à 23:10:25 | Re : Je dois halluciner

luhtor

Ben ta lu le post ? Je le dis deux fois explicitement, mais c'est pas ma question
vendredi 22 avril 2005 à 09:02:27 | Re : Je dois halluciner

MNEMONIC

ça donne la même chose pour les deux programmes ?

Essaye de faire fread((char *)&val, 4, 2, file); dans le deuxième pour voir ...


Cette discussion est classée dans : fichier, file, out, in, float


Répondre à ce message

Sujets en rapport avec ce message

help pour IN OUT dans une fonction [ par youpiyoyo ] j'ai essayé différente maniere sans pouvoir y arriverexemple (source trouvé sur ce site pour recup le chemin a partir d'un fichier):int GetFileDir(IN probléme d'écriture fichier [ par phoenixadb ] phoenixadbJ'ai un problème sur une fonction que je n'arrive pas à résoudremon nom de fichier est test.txtet ma fonction:void ecriturefichier(char* nom Chercher un mot dans un fichier [ par nassim1987 ] Bonjour, je voudrais chercher un mot précis dans un fichier et copier le contenue de ce fichier tant qu'on a pas trouvé ce mot , le code que j'ai me d Afficher le contenu d'un fichier dans un listBox [ par khaoula85 ] Bonjour, Je veux créer une interface graphique (MFC) qui, à l'aide d'un bouton, parcourt les fichiers .txt, affiche le chemin du fichier sélectionné d fonction avec un type file* [ par vercd7am ] Bonjour, j'ai ecrit quelques lignes de code pour pouvoir lire un fichier txt. [code=cpp]int main() { int c; FILE *fichier = NULL; fichi enregister un fichier depuis les ressources [ par baby3378 ] Bonjour à tous, Voilà, afin de faciliter l'utilisation d'une application j'ai décidé de stocker les images et dll en ressource dans mon application af Tableau C [ par 3463 ] Salut à tous j'ai vraiment besoin de votre aide !! [code=cpp] # include # include # include # include # include # include # include using nam C dup utilisation [ par Tom59247 ] Bonjour à tous ! Je réalise actuellement un petit programme qui me permet de mettre quelques infos dans un fichier txt. Après quelques recherches j' calculs tableau [ par 3463 ] Salut à tous !! J'ai besoin de votre aide [^^happy13] Voici mon programme : # include # include # include # include # include # include # incl suppression d'une structure dans un fichier [ par ragon ] bonjour, je souhaite simplement supprimer toute une structure d'un fichier, mais je n'y arrive pas. Voila mon code, j'ai essayé un truc mais ca fonct


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,279 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales