Problème d'affichage d'une File en langage C
hilda787
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
nar6du14 Messages postés 459 Date d'inscription Statut Membre Dernière intervention -
nar6du14 Messages postés 459 Date d'inscription Statut Membre Dernière intervention -
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
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:
- Problème d'affichage d'une File en langage C
- Langage ascii - Guide
- .Bin file - Guide
- Host file - Guide
- .Dat file - Guide
- Iso file - Guide
2 réponses
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.
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.
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;
}
}