Suppression d'un etudiant dans un fichier

Résolu
fatiel - Modifié le 21 avril 2024 à 20:54
 Phil_1857 - 22 avril 2024 à 17:09

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 23293 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 octobre 2024 Ambassadeur 1 548
Modifié le 22 avril 2024 à 08:30

bonjour,

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

0

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

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