[C] : impression par date, liste chainée

Résolu/Fermé
jerémiethe7 Messages postés 152 Date d'inscription dimanche 2 décembre 2007 Statut Membre Dernière intervention 27 février 2009 - 8 mai 2008 à 15:10
jerémiethe7 Messages postés 152 Date d'inscription dimanche 2 décembre 2007 Statut Membre Dernière intervention 27 février 2009 - 8 mai 2008 à 16:33
Bonjour,

j'ai mon projet d'info a rendre pour demain soir, et j'ai un dernier problème :
Je doit afficher à l'écran mes SMS triés par date et par horloge.
Je m'explique, j'ai une liste chainée générale de contacts. dans chaque jeton de cette liste, j'ai une liste chainée pour les SMS de ce contact. Dedans j'ai l'horloge de la forme hh:mm:ss, ainsi que la date de la forme AAAA/MM/JJ.

J'ai essayé qqch pour afficher totu ça trier mais ça ne marche pas très bien et je ne voit pas ce qui cloche.


int Jeton_Cherche(fiche *p_liste,char *heure,char *h_precedente,char *day,char *d_precedente,int position)
{
fiche *p_courant=p_liste;
Message *p_court=p_liste->UnContact.imbriquee;
int rang=0;
for(p_courant;p_courant!=NULL;p_courant=p_courant->p_suivant)// on parcours les jetons des contacts
{
for(p_court=p_courant->UnContact.imbriquee;p_court!=NULL;p_court=p_court->suivant)// on parcours les jetons des sms
{
if(((strcmp(heure,(*p_court).horloge)>0 && strcmp(day,(*p_court).date)==0) || strcmp(day,(*p_court).date)>0) && ( (strcmp(h_precedente,(*p_court).horloge)<0 && strcmp(d_precedente,(*p_court).date)==0) || strcmp(d_precedente,(*p_court).date)<0))// la condition pour entrer dans le if est : il faut que le SMS soit supérieur au précédent et inférieur à l'actuel.
{
strcpy(heure,(*p_court).horloge);// si c'est le cas, on change ces 2 variables, et ce SMS devient notre référence
strcpy(day,(*p_court).date);
rang=position;// on note la position qui nous servira pour réimpimer le SMS
}
else
position++;// on incrémente la position en vue du passage au suivant
}
}
return rang;// on retourne le rang
}

void Ecrire_SMS(fiche *p_liste,char *heure,char *day,int rang,int numero_SMS)
{
fiche *p_courant=p_liste;
Message *p_court;
int position=0;// la position au début est 0
for(p_courant;p_courant!=NULL;p_courant=p_courant->p_suivant)// on parcours les jetons des contacts
{
for(p_court=p_courant->UnContact.imbriquee;p_court!=NULL;p_court=p_court->suivant)// on parcours les jetons des sms
{
if(rang==position)
printf("%d\t%s\t%s\t%s\n",numero_SMS,(*p_court).date,(*p_court).horloge,(*p_court).SMS);
position++;
}
}
}


void affichage_SMS(fiche *p_liste)
{
int sortie=0,position=0,nombre_SMS=1;
char heure[150]="ZZZZZZZZZZZZZZZZ",h_precedente[150]="!!!!!!!!!!!!!!!",day[150]="ZZZZZZZZZZZZZZZZ",d_precedente[150]="!!!!!!!!!!!!!!!";// on met des precendents faibles et des "référence" fortes (voir fonction Jeton_Cherche)
system("cls");//affichage
printf("------------------ liste des sms -----------------\n\n");
while(sortie==0)
{
position=Jeton_Cherche(p_liste,heure,h_precedente,day,d_precedente,position); // on va resortir la position ainsi que les nouveau date et heure du SMS le + récent, mais + vieux que le précédent
//printf("%s %s\t%s %s\n",day,heure,d_precedente,h_precedente);_sleep(1000);
if(strcmp(heure,"ZZZZZZZZZZZZZZZZ")==0) // si on fait un tour, on sort
sortie=1;
else // sinon on écrit le SMS obtenu grace a sa position
{
Ecrire_SMS(p_liste,heure,day,position,nombre_SMS);
strcpy(h_precedente,heure);strcpy(d_precedente,day); //on change les precedents et les "références" en vue de reboucler
strcpy(heure,"ZZZZZZZZZZZZZZZZ");strcpy(day,"ZZZZZZZZZZZZZZZZ");
position=0; // on met la position à 0 car on la donne en argument a Jeton_Cherche
nombre_SMS++;
}
}
}


Voilà merci pour l'aide et n'hésitez pas si vous avez des questions !!
+

1 réponse

jerémiethe7 Messages postés 152 Date d'inscription dimanche 2 décembre 2007 Statut Membre Dernière intervention 27 février 2009 32
8 mai 2008 à 16:33
voilà c'était juste pour dire qu'après + de 2 heures je viens de comprendre ce qu'il se passe.
Dans cherche_Jeton, le "else position++" est a remplacer par "position++;".
Enfin je crois, ça a l'air de marcher.
0