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
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.
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; }