liberation memoire

liberation memoire - C - Programmation

Marsh Posté le 30-11-2005 à 15:38:02    

RE,
voila j'ai un tableau d'element de type struct personne:

Code :
  1. typedef struct personne{             
  2.   char nom[max];
  3.   char prenom[max];
  4.   unsigned long tel;
  5.   int cp;
  6. }personne;
  7. personne *tab;

 
J'ai une fonction d'ecriture:

Code :
  1. # define repertoire "./repertoire"                     //definition fichier repertoire
  2. int ecrit(){
  3.   FILE *fichier;
  4.   fichier= fopen ("repertoire", "w" ) ;                 //ouverture de repertoire en mode "write"
  5.   if (fichier== NULL)                                  //test d'ouverture
  6.     {
  7.       printf ("impossible de creer le fichier repertoire\n" );
  8.       return(-1);
  9.     }
  10.   if(fwrite(tab,sizeof(struct personne ),pMax,fichier)!=pMax)   //ecriture dans le repertoire
  11.     {
  12.       fclose(fichier);
  13.       return(-1);
  14.     }     
  15.   fclose (fichier);


et une fonction de lecture:

Code :
  1. int lecture(){
  2.   FILE *fichier;
  3.   fichier = fopen ("repertoire", "r" );
  4.   if (fichier==NULL)                                       //test d'ouverture en mode "read"
  5.     {
  6.       fichier =fopen ("repertoire","w" );                   //creation du fichier
  7.       if (fichier=NULL)                                    //test ouvertue en mode "write"
  8. {
  9.   printf("impossible d'ouvrir le fichier repertoire\n" );
  10.   return (-1);
  11. }
  12.       else
  13. {
  14.   printf("Le fichier repertoire a été créé\n" );
  15.   return (1);
  16. }
  17.     }
  18.   else
  19.     {
  20.       fread(tab,sizeof(struct personne),pMax,fichier);      //Lecture du fichier
  21.       fclose (fichier);
  22.     }
  23. }


Et je voudrais pouvoir supprimer un element du tableau:

Code :
  1. int Enlever_Personne(){
  2.   int temp=0;
  3.   char name[max];
  4.   char surname[max];
  5.   lecture();
  6.   printf("Entrer le nom de la personne a supprimer: \n" );
  7.   scanf("%s",surname);
  8.   printf("Entrer le prenom: \n" );
  9.   scanf("%s",name);
  10.   for (i=0;i<pMax;i++)
  11.     {
  12.       if ( (strcmp(surname,tab[i].nom)==0 && (strcmp(name,tab[i].prenom)==0))) //comparaison
  13. {
  14.   realloc(tab,sizeof(struct personne));           //reallocation de l'espace memoire pointé par tab
  15.   (personne*)free(tab);                                  //liberation de la memoire pointé par tab
  16.  
  17.   temp++;
  18. }
  19.     }
  20.   if (temp==1)
  21.     {
  22.       fopen("repertoire","w" );
  23.       if(remove (repertoire)!=0)                     //suppression du fichier repertoire
  24. {
  25.   printf("echec remove\n" );
  26.   return (-1);
  27. }
  28.       ecrit();                                     //réécriture du fichier
  29.       printf("Le contact a été supprimé.\n" );
  30.     }
  31.   else {printf("la personne ne figure pas dans le repertoire.\n" );}
  32. }


Mais ça ne marche pas très très bien!
Cette derniere ne me supprime que le nom ou me met des symbole a la place des nom de toute les personne figurant dans le repertoire.

Message cité 1 fois
Message édité par mador le 30-11-2005 à 17:40:53
Reply

Marsh Posté le 30-11-2005 à 15:38:02   

Reply

Marsh Posté le 30-11-2005 à 15:41:05    

gotoxy() fait partie de la bibliothèque conio.h, sous plateforme (DOS/)Windows.
 
Sous unixoïdes, je ne sais pas... peut-être à coup de (n)curses.h ?

Reply

Marsh Posté le 30-11-2005 à 17:08:29    

mador a écrit :

je dois afficher un tableau de valeur et je voudrais pouvoir l'afficher en temps reel puisqu'il se rempli dans le desordre
je voudrais savoir s'il existe une fonction qui permette d'aller a le ligne n et la colonne m de l'ecran d'affichage,
j'ai entendu parler de la fonction gotoxy mais mon compilateur (console sous mandrake 10.1) ne la reconné pas.
pour l'instant mon morceau de programme ressemble a ça:


Tu peux modifier tes boucles pour avoir un affichage séquenciel.
 
Sinon, la gestion plein écran n'est pas standard. Il y a cependant des choses portables.
 
http://mapage.noos.fr/emdel/notes.htm#pleinecran


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 30-11-2005 à 17:22:55    

Merci a vous mais c'est pour un projet a rendre, et en bibliotheque stantard je n'arrive pas a faire ce que je veux.

Reply

Marsh Posté le 30-11-2005 à 17:43:21    

oubliez le

Code :
  1. (personne*)

devant le

Code :
  1. free

, c'etait un test.

Reply

Marsh Posté le 30-11-2005 à 18:09:06    

hum
 

Code :
  1. #define moveto(x,y) printf("\033[%d;%dH", y, x)


 
?

Reply

Marsh Posté le 30-11-2005 à 19:15:59    

Deadog a écrit :

hum
 

Code :
  1. #define moveto(x,y) printf("\033[%d;%dH", y, x)


 
?


Probleme a la compilation:
macro parameters must be comma-separated

Message cité 1 fois
Message édité par mador le 30-11-2005 à 19:19:38
Reply

Marsh Posté le 30-11-2005 à 20:21:02    

mador a écrit :

Probleme a la compilation:
macro parameters must be comma-separated


Je ne vois pas de problème. Quel est ton compilateur et quel est le code exact qui ne compile pas ?
 
Ceci compile sans problèmes :  


#include <stdio.h>
 
#define moveto(x,y) printf("\033[%d;%dH", y, x)    
 
int main (void)
{
    moveto(12,12);
    printf ("hello world" );
    fflush (stdout);
     
    return 0;
}


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 30-11-2005 à 21:35:22    

Autant pour moi je l'avais mal taper.merci

Reply

Marsh Posté le 30-11-2005 à 22:08:54    

mador a écrit :

Autant pour moi je l'avais mal taper.merci


Faut pas taper ( :lol: ) Faut copier/coller.
 
http://www.cyberroach.com/analog/an21/pictures/cut_and_paste.jpg


Message édité par Emmanuel Delahaye le 30-11-2005 à 22:12:12

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 30-11-2005 à 22:08:54   

Reply

Marsh Posté le 30-11-2005 à 22:17:06    

ca fait longtemps que je n'ai pas rappelé que le C est une émanation nauséabonde de Satan [:el g]

Reply

Marsh Posté le 01-12-2005 à 00:42:49    

ça pue pas tant que ça!
Et sinon quelqu'un aurait une solution pour liberer un element du tableau?(cf. haut de la page)

Reply

Marsh Posté le 01-12-2005 à 04:14:57    

Dans ton code je ne vois nul part l'allocation du tableau.

Reply

Marsh Posté le 01-12-2005 à 08:39:55    

mador a écrit :

ça pue pas tant que ça!


 
ca pue au bas mots 1736 fois plus que ca

Reply

Marsh Posté le 01-12-2005 à 09:32:19    

Erreur dans la fonction lecture :
if (fichier=NULL)     <== if (fichier == NULL)
 
Erreur dans la focntion suppression

Code :
  1. realloc(tab,sizeof(struct personne));           //reallocation de l'espace memoire pointé par tab  
  2.       (personne*)free(tab);                                  //liberation de la


Il faut faire

Code :
  1. tmp =   realloc(tab,sizeof(struct personne));           //reallocation de l'espace memoire pointé par tab  
  2.    if (tmp != NULL)
  3.          tab = tmp;                                //liberation de la  
  4.    else
  5.         fprintf(stderr, "Je suis dans la m***e\n" );


Message édité par Trap D le 01-12-2005 à 09:36:00
Reply

Marsh Posté le 01-12-2005 à 14:54:13    

nickel merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed