IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Un souci pour effacer un enregistrement + question


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    ingé sys
    Inscrit en
    Avril 2004
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ingé sys

    Informations forums :
    Inscription : Avril 2004
    Messages : 156
    Points : 70
    Points
    70
    Par défaut Un souci pour 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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void degage()
    {
    	system("cls");
    	printf("Tapez pour quitter ...");	
    	getch();
     
    }
    Merci d'avance

  2. #2
    Membre averti Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Points : 301
    Points
    301
    Par défaut
    Yop a toi !

    Quelques petites remarques :

    A éviter ---> fgets + strtol .

    Aprés

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     f=fopen("fichieruser.txt","r+");
    <---- tu testes pas le retour de fopen, si ça plante t'es fichu ^^

    Aprés pour ton problème j'ai pas super bien compris a vrai dire

    [EDIT] Ah si je vois le truc, mais pourquoi tu gardes les lignes du fichier qui sont a "non" ? Pourquoi tu les vires pas directement? comme ça tu t'embetes pas, ou alors en auras tu besoin pour plus tard?? [/EDIT]
    define: Programmeur : Celui qui résout un problème que vous n'aviez pas, d'une façon que vous ne comprenez pas.

  3. #3
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut
    existe t il une fonction pour sortir d'un programme
    exit() (stdlib) ou return.
    "getch()" n'est pas standard.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  4. #4
    Membre régulier
    Profil pro
    ingé sys
    Inscrit en
    Avril 2004
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ingé sys

    Informations forums :
    Inscription : Avril 2004
    Messages : 156
    Points : 70
    Points
    70
    Par défaut
    jutilise cette methode pcq j'arrive pas a recopier dans un fichier temporaire et ensuite le renommer. C'est mon prof qui m'a indiqué cette methode mais y a ce souci. Si vous avez une soluce ce serait cool.
    Et merci de vos reponses

  5. #5
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut
    -Il faudrait stocker la position réelle de l'enregistrement dans un tableau.
    -Ou bien faire une recherche dans le fichier du 6eme élément qui n'est pas à l'état "non".
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  6. #6
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int i;/* compteur d'element different de "non"*/ 
    int n=3;/*le n eme element qui n'est pas a l'etat "non"*/
    int pos=0;/*sa position dans le fichier*/
    char line[256];
    char* p=NULL;
    do{
        if(fgets(line,sizeof line ,f)==NULL){
                             break;/*pour eviter les boucles infinies si le n eme element n'existe pas*/
                             }
        p=strstr(line,"oui");                                    
        if(p){i++;}
        pos++;
        }while((i-n)!=0);
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

Discussions similaires

  1. Réponses: 5
    Dernier message: 19/09/2006, 11h05
  2. fontion pour effacer l'historique d'IE
    Par foxewizardeur dans le forum Windows
    Réponses: 10
    Dernier message: 09/12/2004, 19h37
  3. boucle pour insérer des enregistrements
    Par roots_man dans le forum ASP
    Réponses: 7
    Dernier message: 05/10/2004, 09h28
  4. Petit soucis pour se connecter à l'adsl
    Par Blowih dans le forum Réseau
    Réponses: 4
    Dernier message: 28/07/2004, 00h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo