Fichier,pile et verification des accolades
salut
j'essaye de vérifier est ce que les accolades dans un programme sont correctes autrement dit vérifier que tous les accolades ouverts ont été fermés .
pour cela,j'utilise une pile ,l'idée est simple à chaque fois qu'on a accolade ouvert on empile et si on a un accolade fermé ont depiler , à la fin du programme on doit(normalement ) trouvé la pile vide :
Nombre accolade ouvert = Nombre accolade fermé.
en outre,j'utilise un fichier.c.
mais le programme lorsqu'il s'exécute il cessé de fonctionner !!
voici mon essai:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| #include<stdio.h>
#include<conio.h>
#include<stdlib.h>
typedef struct element
{
char c;
struct element *suivant;
}elt;
void empiler(char c,elt **Tete)
{
elt *nv=(elt *)malloc(sizeof(elt));
nv->c ='c';
nv->suivant=(*Tete);
(*Tete)=nv;
}
void depiler(elt **Tete)
{
elt *teteLiberer;
teteLiberer=(*Tete);/*recuper le pointeur à libere*/
(*Tete)=(*Tete)->suivant;/*chager la tête */
free(teteLiberer);/*libere les element */
}
int verifier_prog(FILE *f)
{
char c;
f=fopen("a.c","r");
elt *tete=NULL;/*c la pile*/
while(!feof(f))/*tant qu'on n'est pas arriver à la fin */
{
fread(&c,1,1,f);
if(!feof(f))
{
if(c=='{')
empiler(c,&tete);/*tete=NULL*/
else
{
if(c=='}')
if(tete!=NULL)
depiler(&tete);
}
}
}
fclose(f);
if(tete==NULL)
return 1;
else
return 0;
}
int main()
{
FILE *f;
int b=1;
b=verifier_prog(f);
if(b==1)
printf("le programme est correct ");
else
printf("le programme est incorrect ");
getch();
return 0;
} |
je serais trés reconnaissante si quelqu'un peut m'aider à trouver l'erreur :D