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
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
A voir également:
- Problème d'affichage d'une File en langage C
- Langage ascii - Guide
- Host file - Guide
- .Bin file - Guide
- .Dat file - Guide
- Iso file - Guide
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
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.
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.
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
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.
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
23 sept. 2013 à 15:17
sachant que la file est circulaire
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
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;
}
}
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;
}
}