Suppression d'un etudiant dans un fichier
Résolu
fatiel
-
Phil_1857 -
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
3 réponses
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour,
explique-nous à quoi servent tes trois fichiers et pourquoi tu les manipules ainsi.
-
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 ?
-
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; }