Suppression d'un etudiant dans un fichier

Résolu
fatiel -  
 Phil_1857 -

Bonjour,

j'ai un problème lorsque j'ajoute un étudiant dans le fichier et je veux le supprimer, il ne supprime pas par contre si l'étudiant existe déja dans le fichier etudiants.txt il se supprime directement j'ai essayé de changer le mode l'écture du fichier etudiants mais sans résultat reste le meme problème.

void supprimer_etudiant_dans_fichier() {
    // Ouvrir le fichier en mode lecture
    FILE* fetudiants = fopen("etudiants.txt", "r");
    if (fetudiants == NULL) {
        printf("Erreur : impossible d'ouvrir le fichier\n");
        return;
    }

     // Ouvrir un fichier temporaire en mode écriture
    FILE* ftemp = fopen("temp.txt", "w");
    if (ftemp == NULL) {
        printf("Erreur : impossible de créer le fichier temporaire\n");
        fclose(fetudiants);
        return;
    }

    int apogee_supprimer;
    printf("\n\t\tLe numero d'apogee de l'etudiant que vous voulez supprimer : ");
    scanf("%d", &apogee_supprimer);

    char ligne[1000];
    int apogee;
    int TeEcri = 0;
    // Parcourir le fichier original et copier tous les étudiants sauf celui à supprimer
    while (fgets(ligne, sizeof(ligne), fetudiants) != NULL) {
        if (sscanf(ligne, "| %d | %*s | %*s | %*s | %*d | %*f |", &apogee) == 1 && apogee != apogee_supprimer) {
            if (!TeEcri) {
                fprintf(ftemp, "| Apogee |     Nom     |    Prenom    |  Filiere  | Annee d'inscription | Moyenne |\n");
                fprintf(ftemp, "|--------|-------------|--------------|-----------|---------------------|---------|\n");
                TeEcri = 1;
            }
            fwrite(ligne, strlen(ligne), 1, ftemp);
            fprintf(ftemp, "|--------|-------------|--------------|-----------|---------------------|---------|\n");
        }
    }
    // Fermer les fichiers
    fclose(fetudiants);
    fclose(ftemp);
    
    rename("Etudtstemp.txt","etudiants.txt");
    remove("etudiants.txt");
    printf("suppression effectue avec succes ...");
   
    
   
}


Windows / Chrome 124.0.0.0

A voir également:

3 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 

bonjour,

explique-nous à quoi servent tes trois fichiers et pourquoi tu les manipules ainsi.

0
Phil_1857
 

Bonjour,

C'est bizarre, ça:

tu renommes un fichier Etudtstemp.txt en etudiants.txt

rename("Etudtstemp.txt","etudiants.txt");

puis tu le supprimes:

remove("etudiants.txt");

De plus, il sort d'où Etudtstemp.txt ?

0
Phil_1857
 

Moi, pour ajouter ou supprimer des étudiants, je ferais ça

(j'ai simplifié ce qu'il y a à écrire dans le fichier):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void ajouter(char *nom) {
	FILE *fp;
	
	fp = fopen("etudiants.txt","a");
	fprintf(fp,"%s\n",nom);
	fclose(fp);
}

void supprimer(char *nom){
	FILE *fpi, *fpo;
	char ligne[255];

	fpi = fopen("etudiants.txt","r");
	fpo = fopen("tmp.txt","w");
	
	while(fgets(ligne, 255, fpi)!= NULL) {
		ligne[strlen(ligne)-1] = '\0';

		if(strcmp(ligne, nom)){
			fprintf(fpo,"%s\n",ligne);
		}
	}
	fclose(fpi);
	fclose(fpo);

	remove("etudiants.txt");
	rename("tmp.txt", "etudiants.txt");
}

int main(int argc, char *argv[]) {
	
	//ajouter un nouveau nom
	ajouter("toto");
	
	//supprimer un nom existant dans le fichier
	supprimer("titi");

	return 0;
}
0