[C]effacer un enregistrement + question

Fermé
£udo Messages postés 455 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 19 décembre 2006 - 17 juin 2006 à 18:08
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 18 juin 2006 à 22:22
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 :


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 <-.¸¸.·´¯)

1 réponse

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
18 juin 2006 à 22:22
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
0