Problème d'affichage d'une File en langage C

Fermé
hilda787 Messages postés 3 Date d'inscription samedi 21 septembre 2013 Statut Membre Dernière intervention 23 septembre 2013 - 21 sept. 2013 à 17:23
nar6du14 Messages postés 459 Date d'inscription dimanche 27 décembre 2009 Statut Membre Dernière intervention 7 décembre 2013 - 23 sept. 2013 à 23:24
salut,
s'il vous plait est ce que quelqu'un peut me dire ou se trouve l'erreur dans mon code. je crois qu'il n y a pas d'erreur de compilation mais quand je l'exécute il m'affiche des connerie
#include <stdio.h>
#include <string>
#include <conio.h>
#include <string>
#include <cstring>
#include <cstdlib>


struct FileFifo {
int* v;
int n;
int premier;
int libre;
int max;
};

void Ajout(FileFifo *f,int e){
if(f->n==f->max){printf("pleine");exit(-1);}
else f->v[(f->libre+1) %f->max]=e;
f->premier=f->premier+1;
f->n=f->n+1;
}
void retrait(FileFifo *f){
if(f->premier==f->libre){printf("vide"); exit(-1);}
else f->premier=(f->premier+1 )%f->max;
f->n=f->n-1;
}
void aff(FileFifo f){
if(f.premier==f.libre){printf("vide");exit(-1);}
else for(int i=f.premier;i!=f.premier-1;(i++)%f.max){
//je ne c'est pas si cette boucle de for est juste
printf("le %deme element est %d:",i,f.v[i]);
}
}
int Egal(FileFifo f,FileFifo g){
if(f.n!=g.n|| f.premier!=g.premier || f.libre!=g.libre) return 0;
else for (int i=f.premier;i!=f.premier-1;(i++)%f.max){if(f.v[i]!=g.v[i]) return 0; exit(-1);}
return 1;
}
main (){
FileFifo f,g;
f.max=g.max=10;
f.v=(int *)malloc(sizeof(int));
g.v=(int *)malloc(sizeof(int));
f.n=f.premier=f.libre=0;
g.n=g.libre=g.premier=0;
Ajout(&f,2);
Ajout(&f,2);Ajout(&f,5);Ajout(&f,11); retrait(&f);Ajout(&f,19);aff(f);}
A voir également:

2 réponses

nar6du14 Messages postés 459 Date d'inscription dimanche 27 décembre 2009 Statut Membre Dernière intervention 7 décembre 2013 64
22 sept. 2013 à 17:35
retires les 3 derniers include, tu programmes en c t'as pas besoin des version c++ (celle qui débutent par "cs" )

inclus ce qui suit à la place de tous tes include:

#inclide <stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>



dans ton main les malloc ne sont pas du tout necessaire. définis juste 2 variables entières supplémentaires et passes leur adresse à f.v et à g.v ex: int fv, int gv;
f.v = &fv;
g.v = &gv

car fv et gv existeront sur la stack jusqu'à la fin du main!!!!


j'aurais préféré au début que tu écrives

typedef struct _FileFifo FileFifo

struct _FileFifo {
int* v;
int n;
int premier;
int libre;
int max;
};

et donc, dans tes functions, que tu ne déclares que les variables FileFifo alors.
0
hilda787 Messages postés 3 Date d'inscription samedi 21 septembre 2013 Statut Membre Dernière intervention 23 septembre 2013
23 sept. 2013 à 13:23
Merci pour votre reponse mais j'ai toujours le meme probleme je crois que l'erreur que j'ai c'est au niveau de l'affichage de la file, parceque il m'affiche jusqu'a 4188eme elemet et moi j'ai juste inserer 3 ou 4 elemet.
0
hilda787 Messages postés 3 Date d'inscription samedi 21 septembre 2013 Statut Membre Dernière intervention 23 septembre 2013
23 sept. 2013 à 15:17
sachant que la file est circulaire
0
nar6du14 Messages postés 459 Date d'inscription dimanche 27 décembre 2009 Statut Membre Dernière intervention 7 décembre 2013 64
Modifié par nar6du14 le 24/09/2013 à 00:01
Bon écoute, ta structure FileFifo en elle meme n'est pas bien faite!!!

je te propose ceci

typedef struct _FileFifo FileFifo;

struct _FileFifo
{
int *v;
int nombre_total; //nombre total d'élement dans la file
};

//pour ajouter un n ième élément à la file

boolean Ajout( FileFifo* f, int e)
{
int* tmp = NULL;
if(f == NULL) return false;
else
{
tmp = f->v;
f.v = (int *)malloc( ( sizeof(int) ) * (f->nombre_total + 1) );
memcpy( f->v, tmp, f->nombre_total );
free(tmp);
}
f.nombre_total +=1;
f->v[ f->nombre_total] = e;
return true;
}

int retrait( FileFifo* f, int index)
{
if( f == NULL) return 0;
if(f->nombre_total == 0) return 1;
if( index >= f->nombre_total) return 2;
int* tmp = f->v;
f.v = (int *)malloc( ( sizeof(int) ) * (f->nombre_total - 1) );
if( index != 0)
{
memcpy( f->v, tmp, index );
}
memcpy( ( f->v + index ), ( tmp + index + 1), ( f->nombre_total - index -1 ) );
f->nombre_total--;
free(tmp);
return 3;
}

void affiche_file_fifo(FileFifo* f)
{
int i = 0;
for( i = 0; i < f->nombre_total; i++)
{
printf("\nliste des valeurs\n");
printf(" %d ième element de valeur: %d \n", i, f->v[i] );
}
}

int Egal( FileFifo* f, FileFifo* g)
{
if( f== NULL || g == NULL ) return false;
if(f->nombre_total != g->nombre_total) return 0;
else
{
for(int i = 0; i< f->nombre_total; i++)
{
if( f->v[i] != g->v[i]) return 1;
}
return 2;
}
}
0