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 :

Fonction fread [Débutant(e)]


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 14
    Points : 12
    Points
    12
    Par défaut Fonction fread
    Bonjour à tous,

    Je débute en programmation et je travaille sous Mac.
    J'essaie de comprendre comment le programme suivant travaille et ne comprends pas pourquoi la fonction fread me renvoie une adresse alors que je m'attends à recevoir un entier.

    J'applique le programme 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
    #include <stdio.h>
     
    main()
    {
    	char nomfich[21];
    	int n;
    	FILE * entree;
     
    	printf("nom du fichier à lister : ");
    	scanf("%20s", nomfich);
    	entree = fopen (nomfich, "r");
     
    	while (fread(&n, sizeof(int), 1, entree), ! feof(entree))
    		printf ("\n%d", n);
     
    	fclose (entree);
    }
    A un fichier texte qui ne comprend que 2 lignes:
    ABC
    DEF
    Voilà ce que j'obtiens:
    nom du fichier à lister : ABC.txt

    172180033
    172377412MacBook-Pro
    Alors que je me serais attendu à voir :
    1
    1
    0
    Sauriez-vous m'expliquer pourquoi?
    Merci pour votre aide.

  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
    Ce n'est pas une adresse, mais une chaîne de caractère numérique. Tu cherches à récupérer une chaîne de caractère, mais tu la stockes dans un int et tu l'affiches avec %d...
    Essaye de lire ton fichier dans un char[LEN], où LEN pourrait être de taille 8 (ABCDEF donc 6, le \n et le\0 de fin de chaîne).


    Edit : en fait, après avoir relu ton problème, je ne comprends pas trop pourquoi tu t'attends à avoir le résultat « 1 - 1 - 0 ». Tu pourrais expliquer ?
    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
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Comme l'explique Kirilenko, fread() ne fait pas une lecture formatée mais lit et met en mémoire les bytes qu'elle trouve sur le fichier, dans ton cas (ce que confirme la sortie) le code ASCII de 'A' puis de 'B', puis de 'C' puis de '\n' (avec sizeof(int)==4) soit 0x41, 0x42,0x43, 0x0A.
    Le nombre n a alors la représentation binaire 0x4142430A qui correspond sur ta machine (little endian/complément à 2) à l'entier 172180033.
    Une entrée formatée se fait avec fscanf()
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  4. #4
    Membre à l'essai
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    Merci pour vos réponses. Effectivement, le 1 - 1 - 0 n'a aucun sens.

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

Discussions similaires

  1. fonction fread
    Par algoverage dans le forum Débuter
    Réponses: 5
    Dernier message: 01/02/2012, 09h08
  2. Réponses: 6
    Dernier message: 30/12/2011, 22h14
  3. Probleme sur les fichiers (fonction fread)
    Par anoir dsr dans le forum C
    Réponses: 7
    Dernier message: 27/01/2011, 14h31
  4. parametrage fonction fread
    Par sone47 dans le forum C
    Réponses: 3
    Dernier message: 05/03/2007, 15h22
  5. Les fonctions fread et fwrite
    Par Sara83 dans le forum MATLAB
    Réponses: 1
    Dernier message: 16/10/2006, 12h54

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