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 :

Intrusion de caracteres(inconnus) lors de l'ecriture dans un fichier


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 38
    Points : 27
    Points
    27
    Par défaut Intrusion de caracteres(inconnus) lors de l'ecriture dans un fichier
    Bonsoir
    Je viesn demander conseil sur le forum sur un programme que je fais.
    En fait je fais un programme en C . "=> gestion de fichier eleves".
    Donc mon probleme c'est quand je rentre le nom de l'eleve , il ya d'autres caracteres qui s'introduisent dans le fichier. de meme que quand je rentre les nom des matieres.
    Et aussi quand j'ouvre en mode lecture le fichier eleve et matieres et ecriture du fichier notes afin de mettre les notes il ya aussi des caracteres qui s'introduisent dans le fichier note . je ne comprends pas . si quelqu'un peut m'aider . car j'ai vraiment chercher l'ereur mais je la trouve pas.
    Merce d'avance.
    Voici mon code .
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    #include <stdlib.h>
     
    typedef struct eleve
        {
               int numel;
               char nom[50];//50 caracteres maximun pour le nom
               int age;
              // float note;
        }
    eleve ;
     
    typedef struct matiere
    {
            int nummat;
            char nommat[15];
            int coeff;
            }
    matiere;
     
    typedef struct note
    {
    int nummel;
    char nomel[50];
    char nommat[15];
    float noteel;
    float moyenne;
    }
    note;
    /*******************************************************************************/
    void nouvel_eleve (FILE *fichier, char *nom_fichier)
    { 
    eleve student;
    nom_fichier="eleve.dat";
    fichier = fopen(nom_fichier,"a+");
     
    	printf("\n saisie eleve");
    	printf("\nNOM: ");
       scanf("%s",&student.nom);
        fwrite(&student,sizeof(eleve),1,fichier);
     
    printf("\nLeleve %s  ",student.nom);
    printf(" a ete bien enregistre \n");
    printf("Appuyer pour sortir");
    fclose(fichier);
    getch();
    } 
    /***********************************************************************/
    void saisi_mat(FILE *fichier2,char *nom2_fichier2)
    {
    matiere mat;
    nom2_fichier2="matiere.dat";
    fichier2=fopen(nom2_fichier2,"a+");
    printf("Saisisser les matieres\n"); 
    scanf("%s",&mat.nommat);
    fwrite(&mat,sizeof(matiere),1,fichier2);
    printf("Appuyer pour sortir");
    fclose(fichier2);
    getch();
    }  
    /**********************************************************************/    
    void lire_eleve(FILE *fichier,char *nom_fichier)
    {
    eleve student;
    matiere mat;
    int i=1;
    //nom2_fichier2="matiere.dat";
    //fichier2=fopen(nom2_fichier2,"a+");
    nom_fichier="eleve.dat";
    fichier=fopen(nom_fichier,"a+");
    printf("Voici le liste des eleves enregistres\n");
     
    while(fread(&student,sizeof(eleve),1,fichier)!=0)// retourne un entier different de 0 donc le fichier contient quelelque choz
    	{
    	printf("eleve no %d \n",i);
        i++;
    	printf(" %s ",student.nom);	
    	//fwrite(&student,sizeof(eleve),1,fichier);
        } 
    fclose(fichier);
    getch();
    }
    /************************************************************************************/
    void saisi_note(FILE *fichier,char *nom_fichier,FILE *fichier2,char *nom2_fichier2,FILE *fichier3,char *nom3_fichier3)
    {
    eleve student;
    matiere mat;
    note not;
    nom_fichier="eleve.dat";
    nom2_fichier2="matiere.dat";
    nom3_fichier3="note.dat";
    fichier=fopen(nom_fichier,"r");
    fichier2=fopen(nom2_fichier2,"r");
    fichier3=fopen(nom3_fichier3,"a+");
     
    //if(fread(&student,sizeof(eleve),1,fichier) && fread(&mat,sizeof(matiere),1,fichier2)!=0)// test si les fichiers ne sont pas vides
    //{
    while(fread(&student,sizeof(eleve),1,fichier)&& fread(&mat,sizeof(matiere),1,fichier2)&& fread(&not,sizeof(note),1,fichier3)!=0)// meme test que le if mais en fesant une boucle
    	{
    	printf("eleve :");
    	//printf("%d",&student.numel);
    	printf("%s",&student.nom);
    	printf("%s",&mat.nommat);
    	scanf("%d",&not.noteel);
    	printf("\n");	
    fwrite(&not,sizeof(note),1,fichier3);// ecriture dans le fichiers notes des infos saisies
     
    }
    printf("Enregistrement reussi!!!\n");
     fclose(fichier);
     fclose(fichier2);
     fclose(fichier3);     
    //}else{  // si le fichier est vide alors...
        //  printf("Un des fichiers Eleve ou Matiere est vide veuiller le renseigner dabord merki!!!");
        //  }
     
       // fwrite(&mat,sizeof(matiere),1,fichier2);
     
    printf("Appuyer sur une touche pour retourner au menu.");
    getch();
    }
     
    /**************************************************************************************/
    int main()
    {
    FILE *fichier, *fichier2,*fichier3;
    char nom[10],nom2[10],nom3[10];/* nom du fichier */
    char choix;
    do
    {
    system("cls");
      	printf("CREATION DUn FICHIER ELEVE ---> 1\n");
    	printf("LECTURE DU FICHIER  ELEVE ---> 2\n");
       	printf("Saisie note ELEVE ---> 3\n");
       	printf("Saisie matiere -->4\n");
    	printf("SORTIE CONSOLE  ---> S\n\n");
    	printf("VOTRE CHOIX: ");
    	choix = (char)getchar();
     
    	switch(choix)
    		{
    		case '1':nouvel_eleve(fichier,nom);
            break;
    		case '2':lire_eleve(fichier,nom);
            break;                                                                              
    		case '3':saisi_note(fichier,nom,fichier2,nom2,fichier3,nom3);
            break;
            case'4':saisi_mat(fichier,nom);
    		}
    }
    while ((choix!='S') && (choix!='s'));
    printf("Appuyer pour quitter l'espace de travail");
    getch();
    }

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par patchouli
    En fait je fais un programme en C . "=> gestion de fichier eleves".
    Donc mon probleme c'est quand je rentre le nom de l'eleve , il ya d'autres caracteres qui s'introduisent dans le fichier. de meme que quand je rentre les nom des matieres.<...>
    Beaucoup de choses à corriger avant de lancer quoique ce soit :
    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
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums2\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c: In function `nouvel_eleve':
    main.c:36: warning: assignment discards qualifiers from pointer target type
    main.c:41: warning: char format, different type arg (arg 2)
    main.c: In function `saisi_mat':
    main.c:54: warning: assignment discards qualifiers from pointer target type
    main.c:57: warning: char format, different type arg (arg 2)
    main.c: In function `lire_eleve':
    main.c:71: warning: assignment discards qualifiers from pointer target type
    main.c:67: warning: unused variable `mat'
    main.c: In function `saisi_note':
    main.c:91: warning: assignment discards qualifiers from pointer target type
    main.c:92: warning: assignment discards qualifiers from pointer target type
    main.c:93: warning: assignment discards qualifiers from pointer target type
    main.c:104: warning: char format, different type arg (arg 2)
    main.c:105: warning: char format, different type arg (arg 2)
    main.c:106: warning: int format, float arg (arg 2)
    main.c: At top level:
    main.c:127: warning: function declaration isn't a prototype
    main.c: In function `main':
    main.c:156: warning: control reaches end of non-void function
    main.c:128: warning: 'fichier' might be used uninitialized in this function
    main.c:128: warning: 'fichier2' might be used uninitialized in this function
    main.c:128: warning: 'fichier3' might be used uninitialized in this function
    Linking console executable: console.exe
    Process terminated with status 0 (0 minutes, 6 seconds)
    0 errors, 17 warnings
    http://emmanuel-delahaye.developpez....tm#cfg_compilo
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Sans oublier l'utilisation de scanf("%s") (l'une des deux pires utilisations possibles de scanf()), l'écriture directe dans un paramètre sans même le lire (pourquoi utiliser un paramètre si on l'utilise comme une simple variable locale ?)...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par Médinoc
    Sans oublier l'utilisation de scanf("%s") (l'une des deux pires utilisations possibles de scanf()), l'écriture directe dans un paramètre sans même le lire (pourquoi utiliser un paramètre si on l'utilise comme une simple variable locale ?)...
    scanf("%s", &xxx) qui plus est.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 38
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Beaucoup de choses à corriger avant de lancer quoique ce soit :
    [CODE]
    Project : Forums
    Compiler : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums2\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c: In function `nouvel_eleve':
    main.c:36: warning: assignment discards qualifiers from pointer target type
    main.c:41: warning: char format, different type arg (arg 2)....[code]
    Bonjour
    Merci de m'avoir répondu. je voudrais savoir si tous ces warnings tu les obtiens en compilant? car moi j'ai aucun warnings et aucunes erreur. j'utilise DEVCPP comme compilateur.
    Merci

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par patchouli
    Merci de m'avoir répondu. je voudrais savoir si tous ces warnings tu les obtiens en compilant? car moi j'ai aucun warnings et aucunes erreur. j'utilise DEVCPP comme compilateur.
    Tu utilises comme moi (Code::Blocks) le compilateur MinGW (Dev-C++ n'est qu'un intégrateur).

    Le tout est de savoir le configurer.

    As-tu remarqué le lien à la fin de mon post ?
    Pas de Wi-Fi à la maison : CPL

Discussions similaires

  1. aller à la ligne lors de l'ecriture dans un fichier xml
    Par nancy maman dans le forum Général Python
    Réponses: 4
    Dernier message: 11/04/2011, 12h56
  2. Réponses: 9
    Dernier message: 21/02/2010, 11h14
  3. Probleme lors de l'ecriture dans un fichier texte
    Par mddu66 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 15/09/2009, 17h24
  4. Comment sauter une ligne lors de l'ecriture dans un fichier
    Par Harald dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 29/05/2009, 18h01
  5. Probleme de "" lors de l ecriture dans un fichier
    Par mcphand dans le forum Windows Forms
    Réponses: 7
    Dernier message: 19/06/2007, 13h56

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