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 : Sélectionner tout - Visualiser dans une fenêtre à part
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