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 :

Ecriture et lecture d’entiers dans un fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 10
    Par défaut Ecriture et lecture d’entiers dans un fichier
    Bonjour,

    Comme le cours que j’ai eu sur les fichiers étant réellement minimaliste, j’essaye de mettre en forme exemple simple pour contrôler si j’ai bien tout compris.

    Dans le petit programme ci-joint :

    1 – Je définis des entiers avec scanf puis j’essaye de les écrire avec fwrite dans un fichier ouvert en écriture. J’ai appelé ce fichier fichint.txt en espérant pouvoir en afficher le contenu avec Wordpad par exemple.
    Je « rentre » les nombres puis je ferme le fichier par fclose.
    Quand j’l ouvre avec Wordpad, je n’y retrouve pas les nombres que j’ai entrés au clavier.

    2 – Ensuite, j’ouvre ce même fichier en lecture. Je « lis » avec fread, les nombres entiers qu’il est censé contenir. Puis je les imprime à l’écran.
    J’imprime bien des entiers mais ils ressemblent plus à des adresses qu’aux entiers que j’avais définis avec scanf.

    Conclusion : Le programme compile et s’exécute mais ne produit pas les résultats escomptés.

    Si vous voyez les erreurs que j’ai commises, je vous remercie par avance de m’aider à les identifier et à les corriger.

    Par avance, merci,

    Getud78
    Fichiers attachés Fichiers attachés

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par getud78 Voir le message
    Je « lis » avec fread, les nombres entiers qu’il est censé contenir
    Si vous voyez les erreurs que j’ai commises, je vous remercie par avance de m’aider à les identifier et à les corriger.
    Bonjour

    Une seule erreur: ce c=getc(ouvert) dans le while() ce qui ne correspond donc pas à ce que tu décris (tu ne lis pas « que » avec fread()).
    Pourquoi tu lis 1 caractère ? Quand ensuite (en dessous) tu tentes de lire les entiers écrits ben t'as perdu un caractère de cet entier. Tu lis donc en décalé et les nombres que tu récupères ne sont pas les bons.
    Si par exemple tu écris 1, 2, 3 ; cela se traduira dans le fichier par 000100020003 (4 octets par entier). Pour relire, il te faut alors relire exactement ce qui a été écrit (tu écris 0001, tu dois lire 0001).
    Si tu commences par lire un caractère tu lis alors le premier 0 et tu te déplaces sur l'octet suivant. Ensuite tu lis 4 octets donc tu lis 0010. Et 0010 ce n'est pas 1 (mais 256).

    La lecture se fait par fread() donc c'est fread() qu'il faut tester et le getc() (qui est d'ailleurs une macro de fgetc()) est inutile.

    Accessoirement c'est normal que le fichier ne soit pas visible par un éditeur, il a été écrit au format binaire. Si tu veux un fichier visible par un éditeur (on dit parfois "human readable") il te faut l'écrire en ascii (utiliser fprintf() pour écrire et fscanf() pour lire).

    PS: la prochaine fois, place ton code directement dans ton post entre des balises [ code ] et [ /code ].
    PS2: pourquoi 2 variables différentes ("sortie" et "ouvert") pour symboliser un seul fichier ?
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. ecriture d'un tableau dans un fichier
    Par hafid49 dans le forum C
    Réponses: 4
    Dernier message: 06/06/2006, 23h38
  2. Ecriture à une position donné dans un fichier
    Par xarius dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 29/05/2006, 16h05
  3. lecture écriture dans un fichier
    Par poukill dans le forum C++
    Réponses: 9
    Dernier message: 23/05/2006, 11h02
  4. [PERL] Problème lecture/écriture dans un fichier
    Par LE NEINDRE dans le forum Langage
    Réponses: 4
    Dernier message: 17/08/2005, 13h15
  5. Réponses: 13
    Dernier message: 14/06/2003, 22h15

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