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
A voir également:
- Suppression d'un etudiant dans un fichier
- Forcer la suppression d'un fichier - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier bin - Guide
- Fichier rar - Guide
3 réponses
yg_be
Messages postés
24281
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 585
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;
}