[C]effacer un enregistrement + question
salut, j'ai une fonction qui permet d'effacer un utilisateur de mon fichier. En realité, il n'est pas supprimé, son etat est mis à "non". Voila le code :
La variable ok reçoit le nombre d'utilisateur inscrit dans le fichier qui sont a l'état "oui". Mais j'ai un souci. Par exemple, j'ai 7 personnes dans mon fichier.
Les 5 premiers à "oui", la 6eme à "non", et la 7eme à "oui".
Donc quand j'affiche le tableau (grace a la fontion afficheUser(), il me donne un tableau avec 6 utilisateurs. Mais si je veux supprimer le 6eme, il me positionne sur le 6eme enregistrement du fichier qui est deja à non, et voila mon souci.
Je ne sais pas comment résoudre ce souci, quelqu'un pourrait' il m'aider ?
Sinon ma question est : existe t il une fonction pour sortir d'un programme, j'utilise Microsoft C++, j'ai fais un truc mais ça marche pas vraiment :
Merci d'avance
(¯`·.¸¸.-> £udo <-.¸¸.·´¯)
void suppuser(void) { int ok; int num; int choix; FILE *f; suser user; system("cls"); printf("Vous avez decide de supprimer un utilisateur du fichier."); ok=afficheUser(); printf("Entrez l'indice de l'utilisateur a supprimer du fichier :"); scanf("%d",&num); //si le num tapé n'est pas compris entre 1 et le nbre d'élèves ds le fichier=>erreur while(num<1 || num>ok) { printf("\nNumero inexistant, recommencez svp :"); flushall(); scanf("%d",&num); } num--; f=fopen("fichieruser.txt","r+"); fseek(f,sizeof(user)*(num),SEEK_SET);//on se positionne a l'endroit voulu fread(&user,sizeof(user),1,f);//lecture du fichier printf("\n\n\nVous avez choisi de supprimer l'utilisateur %s\n\n",user.nom); printf("Etes vous sur(e) ?"); printf("\n1: oui 2: non\nVotre choix :") scanf("%d",&choix); if(choix==1) { //printf("On va zaper l'user !"); strcpy(user.etat,"non"); fseek(f,sizeof(user)*(num),SEEK_SET); fwrite(&user,sizeof(user),1,f);//ecriture fclose(f);//fermetrure printf("L'utilisateur a bien ete supprime\nTapez une touche pour retourner au menu"); getch(); menu(); } else { menu(); } getch(); }
La variable ok reçoit le nombre d'utilisateur inscrit dans le fichier qui sont a l'état "oui". Mais j'ai un souci. Par exemple, j'ai 7 personnes dans mon fichier.
Les 5 premiers à "oui", la 6eme à "non", et la 7eme à "oui".
Donc quand j'affiche le tableau (grace a la fontion afficheUser(), il me donne un tableau avec 6 utilisateurs. Mais si je veux supprimer le 6eme, il me positionne sur le 6eme enregistrement du fichier qui est deja à non, et voila mon souci.
Je ne sais pas comment résoudre ce souci, quelqu'un pourrait' il m'aider ?
Sinon ma question est : existe t il une fonction pour sortir d'un programme, j'utilise Microsoft C++, j'ai fais un truc mais ça marche pas vraiment :
void degage() { system("cls"); printf("Tapez pour quitter ..."); getch(); }
Merci d'avance
(¯`·.¸¸.-> £udo <-.¸¸.·´¯)
A voir également:
- [C]effacer un enregistrement + question
- Enregistrement mp3 gratuit - Télécharger - Streaming audio
- Comment effacer un iphone - Guide
- Comment effacer un compte gmail - Guide
- Effacer les données de navigation sur android - Guide
- Comment couper un enregistrement audio - Guide
1 réponse
Humm stocker de l'information uniquement dans le fichier est à mon avis une mauvaise idée. D'une part car ce n'est pas facile à manipuler, comme tu le vois, et d'autre part parce que c'est très lent !
1ère solution :
1) Lire le fichier et le stocker en mémoire
2) Manipuler cette structure de donnée pour les ajouts/suppression/modifications
3) A la validation, réecrire le fichier
2ème solution :
Si le nombre d'utilisateur est important, le mieux c'est de remplacer le fichier par une base de donnée et d'utiliser une librairie qui coupera mysql et le c/c++. Ceci dit une fois qu'une BDD est mise en place, il est sans doute plus simple de faire une interface en php/html qu'en c/c++...
Bonne chance
1ère solution :
1) Lire le fichier et le stocker en mémoire
2) Manipuler cette structure de donnée pour les ajouts/suppression/modifications
3) A la validation, réecrire le fichier
2ème solution :
Si le nombre d'utilisateur est important, le mieux c'est de remplacer le fichier par une base de donnée et d'utiliser une librairie qui coupera mysql et le c/c++. Ceci dit une fois qu'une BDD est mise en place, il est sans doute plus simple de faire une interface en php/html qu'en c/c++...
Bonne chance