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:
je serais trés reconnaissante si quelqu'un peut m'aider à trouver l'erreur
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; }![]()
Partager