pb avec ma fonction trier et ma fonction chargement

pb avec ma fonction trier et ma fonction chargement - Programmation

Marsh Posté le 05-04-2002 à 23:06:10    

bonjour a tous
 
je suis assez novice en c, je rencontre 2 problemes :
 
[g]1--dans ma fonction trie ci jointe quand je rentre des elements du tableau
en majuscule et en minuscule, la fonction ne trie pas- elle trie uniquement
si ce sont que des majuscules uniquement ou des minuscules

//les fonctions trier[/g]
void permute(disc *tableau,int i,int j);
void trier(disc *tableau,int nbdisc)
 {
        int i,j,min=0,tmp=0;
 
  for(i=0;i<nbdisc;i=i+1)
  // if(islower(tableau[i].auteur) !=0)
    //toupper(tableau[i].auteur);
  {
   min=i;
 
   for(j=i;j<nbdisc;j=j+1)
   {
    if(strcmp(tableau[min].auteur,tableau[j].auteur)>0)
 
     min=j;
   }
     if(min !=i)
     permute(tableau,i,min);
 
  }
}
 
 
void permute(disc* tableau,int i,int min)
{
 char temp[NBRE];
  int tmp;
 
  strcpy (temp,tableau[min].auteur);
  strcpy(tableau[min].auteur,tableau[i].auteur);
  strcpy(tableau[i].auteur,temp);
 
  tmp=tableau[min].annee_album;
  tableau[min].annee_album=tableau[i].annee_album;
  tableau[i].annee_album=tmp;
 
  tmp=tableau[min].reference;
  tableau[min].reference=tableau[i].reference;
  tableau[i].reference=tmp;
 
 
}
 
2--dans ma fonction chargement et sauvegarde lorsque je ferme mon programme
mon fichier est vide , mon programme efface tout lors de la fermeture.......

 
#include "discotheque.h"
 
 
/*prototype fonction sauvegarde BD*/
int sauvegarde_fichier(disc *tableau,int nbdisc)
{
 int i;
 FILE *fp;
 
 
  fp=fopen("discotheque.dat","w" );
   if(fp==NULL)
 
 { printf("erreur lors de la sauvegarde %s",fp);
   return -1;}
 
 for(i=0;i<nbdisc;i++)
 {
  fprintf(fp,"%s\t %d\t %d\t",tableau[i].auteur,&tableau[i].annee_album
  ,&tableau[i].reference);
 }
 printf("La sauvegarde est faites \n" );
 fclose(fp);
 return 0;
}
 
//prototype chargement
int chargement_fichier(disc* tableau, int *pt_nbdisc)
{
 int i;
 //char buffer;
 FILE *fp;
 
 fp=fopen("discotheque.dat","r" );
  if(fp==NULL)
 {
 printf("erreur lors du chargement %s",fp);
 return -1;
 }
 
 for(i=0;i<(*pt_nbdisc);i++)
 // while((fgets(buffer,*pt_nbdisc,fp)!=NULL) && (i<NBRE_DISC))
 {
  fscanf(fp,"%s\t %d\t %d\t",tableau[i].auteur,&tableau[i].annee_album
  ,&tableau[i].reference);
 
 }
 
 printf("Le chargement est fait \n" );
 fclose(fp);
 return 0;
}
merci pour votre aide

Reply

Marsh Posté le 05-04-2002 à 23:06:10   

Reply

Marsh Posté le 08-04-2002 à 16:20:58    

Ce n'est qu'un extrait ? Le tableau (structure disc), il est bien dimensionné qq part, j'espère. Les champs "auteur", ils sont de longueur fixe ou variable selon la longueur de la chaîne (+1 pr le \0 terminal)?
 
Vu leur code ASCII, les noms en MAJUSCULE précèdent TOUS les noms en Minuscules, sait pas si ça peut aider...
Si on veut que "toto1" précède "TOTO2", faut comparer la version "majuscule" de chaque chaîne.
 
Pour éviter toutes ces recopies, un moyen plus "léger" serait (c'est ce que je fais pour des bases de données (chimie/formules/) de structure perso), c'est d'avoir un tableau d'int qui donne le rang de l'enregistrement. On manipule que ce tableau et non chaque enregistrement.  :)  
En en ayant un autre qui donne le numéro d'objet par rapport à sa place, on a accès dans tous les sens (quelle place a le disque x dans la base, quel est le y-ième disque de la base).
 
Si c'est un exercice, faut pas changer la méthode.. :D

Reply

Sujets relatifs:

Leave a Replay

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