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 :

Mauvaise impression dans fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 108
    Par défaut Mauvaise impression dans fichier
    Bonjour,

    Voici mon code, lors de la création du fichier, les caractères imprimés ne sont pas bon. Pouvez vous m'aider svp?
    merci

    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
    #include <stdio.h>
     
    struct individu{
    	char nom[20];
    	char prenom[15];    //Structure Individu qui permet de saisir des infos sur une personne
    	float taille;
    	int age;
    };
     
    int main(void) {
     
    	char nomfich[150];
    	int NBINDIVIDU;
    	int i;
    	FILE * sortie;
     
    	printf("Donnez un nom de fichier a creer svp:");
    	scanf("%20s", nomfich);
    	printf("Combien d'individus voulez vous stocker dans le fichier?\n");
    	scanf("%d", &NBINDIVIDU); // Le nombre d'individu que l'on souhaite enregistrer
    	struct individu fichier[NBINDIVIDU];
    	sortie=fopen (nomfich, "w");
     
     
    	for (i=0;i<NBINDIVIDU;i++){
    		printf("Nom     :"); scanf("%s", fichier[i].nom); fwrite (&fichier[i].nom, sizeof(int), 1, sortie);
    		printf("Prenom  :"); scanf("%s", fichier[i].prenom);  fwrite (&fichier[i].prenom, sizeof(int), 1, sortie);
    		printf("Taille  :"); scanf("%f", &fichier[i].taille); fwrite (&fichier[i].taille, sizeof(int), 1, sortie);
    		printf("Age     :"); scanf("%d", &fichier[i].age); fwrite (&fichier[i].age, sizeof(int), 1, sortie);
    	}
     
    	printf("**** Le fichier a ete creer avec les infos suivantes ****\n");
       for (i=0;i<NBINDIVIDU;i++)
    	printf("Nom:%s   Prenom:%s   Taille:%f   Age:%d\n", fichier[i].nom, fichier[i].prenom, fichier[i].taille, fichier[i].age);
    }

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 157
    Billets dans le blog
    152
    Par défaut
    Bonjour,

    Ayé, j'ai trouvé l'erreur ( je crois ).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    printf("Nom     :"); scanf("%s", fichier[i].nom); fwrite (&fichier[i].nom, sizeof(int), 1, sortie);
    		printf("Prenom  :"); scanf("%s", fichier[i].prenom);  fwrite (&fichier[i].prenom, sizeof(int), 1, sortie);
    		printf("Taille  :"); scanf("%f", &fichier[i].taille); fwrite (&fichier[i].taille, sizeof(int), 1, sortie);
    		printf("Age     :"); scanf("%d", &fichier[i].age); fwrite (&fichier[i].age, sizeof(int), 1, sortie);
    Le fwrite, pour enregister une chaine de caractère, doit prendre la taille de la chaine en paramètre.
    Dans votre cas, vous avez sizeof(int), et puis 1, du coup il va écrire un peu n'importe quoi ( 4 lettres ? ) et s'arreter.
    Je vous conseille d'utiliser la fonction strlen() pour connaitre la taille de la chaine de caractères. Pareil le float, il faut mettre sizeof(float).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Il y a plusieurs problèmes dans ton code.

    Ton scanf n'est pas très sécurisé, puisque si le nom entré dépasse 20 caractères, ça va planter.

    Les trois premiers paramètres de ton fwrite sont faux :
    - le premier doit être un pointeur de la zone à écrire. Le nom d'un tableau est un pointeur. Donc dans ton cas fichier[i].prenom suffit, tu n'as pas besoin de rajouter le &.
    - le deuxième paramètre est la taille des éléments que tu veux écrire. Tu as un tableau de caractères, c'est dons sizeof(char). C'est à dire 1.
    - le troisième est le nombre d'éléments que tu écris. Je suppose que tu as mis 1, car tu t'es dis que tu écrivais une seule chaîne. Or c'est le nombre d'éléments de la chaîne qu'il faut mettre.Donc comme l'as dit LittleWhite, tu peux utiliser strlen.

    Ce qui donne bien écrit (il faudra sûrement caster ta chaîne en const char*) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fwrite(fichier[i].nom, sizeof(char), strlen((const char*)fichier[i].nom), sortie);
    Ou sinon, si tu ne veux pas te poser toutes ces questions, tu peux utiliser fprintf, qui fonctionne comme un printf sauf qu'il prend en premier paramètre un FILE*.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf(sortie, "%s", fichier[i].nom);

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 108
    Par défaut
    merci pour votre aide!

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

Discussions similaires

  1. Impressions dans un fichier
    Par hanky dans le forum VBA Word
    Réponses: 4
    Dernier message: 23/09/2007, 19h40
  2. Pb Creation PDF avec PDFCreator apres impression dans fichier PRN
    Par asimut dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 11/09/2007, 17h46
  3. AS400 et impression dans un fichier.
    Par Kanter dans le forum AS/400
    Réponses: 5
    Dernier message: 30/07/2007, 20h19
  4. impression dans un fichier txt
    Par bouzaidi dans le forum C++
    Réponses: 2
    Dernier message: 23/05/2007, 08h41
  5. [WD11] problème en impression dans fichier
    Par Yaone dans le forum WinDev
    Réponses: 11
    Dernier message: 20/03/2007, 18h06

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