Modification de fichier

titi.007 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
bonjour, voila un programme qui permet de corriger la note d'un étudiant dans une matière donnée dans un fichier notes.txt. On suppose que chaque ligne de ce fichier contient les données suivantes:
carte étudiant : 5 caractères (entier)
code matière : 5 caractères (entier)
note :5 caractères(réel)
exp:123450021213.25 dont 12345 : carte étudiant; 00212: code matière et 13.25 : note
mais après l'exécution de programme il ne donne pas un résultat correct
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define max_str 512

void actualise_note_etudiant(FILE *fp_notes, int code_matiere, int carte_etudiant, float note)
{
    char s[512], s1[512];
    int carte, code;
    float ancien_note;

    rewind(fp_notes);
    while(fgets(s,max_str,fp_notes)){
        sscanf(s,"%5d %5d %5f",&carte,&code,&ancien_note);
        if((carte==carte_etudiant)&&(code==code_matiere)){
            fseek(fp_notes, -15L, SEEK_CUR);
            sprintf(s1,"%5d %5d %5f",carte,code,note);
            fputs(s1,fp_notes);
        }
    }
}

int main()
{
    FILE *fp_notes;
    if(!(fp_notes=fopen("notes.txt","r+"))) {  printf("erreur d'ouverture\n");  exit(0); }
    actualise_note_etudiant(fp_notes,10111,11111,17);
    return 0;
}



A voir également:

1 réponse

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Il ne faut pas modifier un fichier comme ça en mode texte.
Si ce que tu récris n'a pas le même nombre de bits, cela provoquera des problèmes. En mode texte, il faut créer un autre fichier, recopier ligne par ligne et modifier la ligne en question avant de l'écrire.

Cdlt,
0