Bonjour à tous, je fais un programme avec un gestionnaire de messge. Les opérations qu'on peut y effectuer: initialiser, ajouter des messages afficher.
l'affichage peut être total ou selectif c'est à dire afficher les messages qui ne le sont pas encore affichés.
L'interface du module est le suivant:
Code c++ : 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 struct etMsg { char *psMsg; int dDisplay; }; typedef struct { struct etMsg *pstTabMsg; int dCurPos; int dNbrBloc; } GMESSAGE ; //Prototypes des fonctions: void gmInit (GMESSAGE *pGM, int *pRC); void gmReInit (GMESSAGE *pGMsg, int *pRC); void gmAdd (GMESSAGE *pGM, char *pMsg, int *pRC); void gmDisplay (GMESSAGE *pGMsg, int *pRC); void gmDisplaySelectif (GMESSAGE *pGMsg, int *pRC);
code ma fonctions d'initialisation
Code c++ : 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 void gmInit (GMESSAGE *pGMsg, int *pRC) { //----------------------------------------------- //création du tableau de structure par 1 malloc //et gestion des erreurs //initilalisation de la position courante //initilalisation du nombre de blocs //----------------------------------------------- pGMsg->pstTabMsg = (struct etMsg *)malloc(sizeof(struct etMsg)* TAILLE_BLOC); //pGMsg->pstTabMsg <==> (*pGMsg) . pstTabMsg if(pGMsg->pstTabMsg == NULL) { printf("Erreur allocation memoire"); *pRC = GM_ERROR; return; } pGMsg->dCurPos = 0; pGMsg->dNbrBloc = 1; }
code fonction d'insertion
code fonction affichage total:
Code c++ : 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 //********************************************************************* //FONCTION D'INSERTION DE MESSAGE DANS LE GESTIONNAIRE DE MESSAGE //Description : Cette fonction ajoute un nouveau message dans le //gestionnaire de messages. //Pré-condition : le gestionnaire de messages doit avoir été initialisé //********************************************************************** void gmAdd(GMESSAGE *pGMsg, char *pMsg, int *pRC) { int dLong; //----------------------------------------------------------- //si PosCur depasse la taille du bloc faire une réallocation //----------------------------------------------------------- if(pGMsg->dCurPos >= TAILLE_BLOC * pGMsg->dNbrBloc )//-> prioritire à * { pGMsg->dNbrBloc++; pGMsg->pstTabMsg = (struct etMsg *)realloc(pGMsg->pstTabMsg, sizeof(struct etMsg) * pGMsg->dNbrBloc * TAILLE_BLOC); if(pGMsg->pstTabMsg == NULL) { printf("Erreur reallocation \n "); *pRC = GM_ERROR_REALLOC; return; } } //-------------------------------------------------------- //calcul de la longueur du message reçu en paramètre //création du tableau pour ce message et gestion d'erreurs //copie du messge //initialisation du display pour le message //incrémentation de la position courante //-------------------------------------------------------- dLong = strlen(pMsg); pGMsg->pstTabMsg[pGMsg->dCurPos].psMsg = (char * )malloc(sizeof(char) * (dLong + 1)); if(pGMsg->pstTabMsg[pGMsg->dCurPos].psMsg == NULL) { printf("Erreur alocation memoire message\n "); *pRC = GM_ERROR_ALLOC; return; } strcpy(pGMsg->pstTabMsg[pGMsg->dCurPos].psMsg, pMsg); pGMsg->pstTabMsg[pGMsg->dCurPos].dDisplay = 0; (pGMsg->dCurPos)++; }
mais j'ai des problémes avec la fonction d'affichage selectif
Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 void gmDisplay (GMESSAGE *pGMsg, int *pRC) { int dI; for(dI = 0; dI < pGMsg->dCurPos; dI++) printf("Message %d = %s\n", dI, pGMsg->pstTabMsg[dI].psMsg); *pRC = GM_OK; pGMsg->pstTabMsg[pGMsg->dCurPos].dDisplay = 1; return; }
voici ce que j'ai fait
Code c++ : 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 void gmDisplaySelectif(GMESSAGE *pGMsg, int *pRC) { int dI;//indice de parcours du tableau //dI = pGMsg->dCurPos; if(pGMsg->pstTabMsg[pGMsg->dCurPos].dDisplay !=0) for(dI = pGMsg->pstTabMsg[pGMsg->dCurPos].dDisplay; dI < pGMsg->dCurPos; dI++) printf("Message %d: %s\n", dI, pGMsg->pstTabMsg->psMsg[dI]); pGMsg->pstTabMsg[pGMsg->dCurPos].dDisplay = 1; *pRC = GM_OK; return; }
Dans le main, je dois faire un menu et l'utlisateur peut par exemple choisir le gestionnaire de message qu'il veut et y effectuer les opérations qu'il désire.
voila le main qui a plein d'erreurs
Voila je sais qu'il ya pas mal d'erreurs, je n'arive pas à me corriger. Merci de votre aide
Code c++ : 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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126 #include"PRJ35FONC.h" #include<stdio.h> #include<stdlib.h> int main() { int dRC; char tsMsg[100]; char cRep; char cGM_Choice; char cGM_Action; GMESSAGE tyGestError; GMESSAGE tyGestInfo; //ALGORITHME: //Initilaiser le gestionnaire de message //si ereur_initit stopper le programme et afficher 1 message d'erreur //Voulez-vous introduire 1 message? //Lire Rep //Tant que Rep!= Non // lire le message et le mémoriser dans le gestionnaire de messages // si erreur_mémorisation stopper programme et afficher 1 message d'erreur // Voulez-vous introduire 1 message? // Lire Rep //Fin tantque //Afficher les messges mémorisés //si erreur_affichage afficher 1 messsge d'erreur //--------------------------------------------------------------- printf("LE GESTIONNAIRE DE MESSSAGES VERSION 4\n "); printf("\nPour utilisier le GM d'erreurs entrer 1,\nPour utiliser le GM d'info entrer 2...\n\n"); printf("Choix du GM : "); cGM_Choice = getchar(); fflush(stdin); if(cGM_Choice == '1') { printf("Que voulez-vous faire sur le GM ?\n"); printf("Pour initialiser entrer 1\n"); printf("Pour inserer 1 message dans le GM entrer 2\n"); printf("Pour 1 affichage total du GMentrer 3\n"); printf("Pour 1 affichage selectif du GM entrer 4\n"); printf("Pour reinitialiser le GM entrer 5\n"); printf("L\'action choisie est : "); cGM_Action = getchar(); fflush(stdin); //------------------------------------- //Traitement pour le GM 1 ===> GestError //------------------------------------- if (cGM_Action == '1') { gmInit(&tyGestError, &dRC); if(dRC == GM_ERROR) { printf("\n Initialisation incorrecte \n "); exit(0); } } if (cGM_Action == '2') do{ printf("\n Entrer le message : "); gets(tsMsg); fflush(stdin); //memoriser le message gmAdd(&tyGestError, tsMsg, &dRC); if(dRC == GM_FULL) { printf("\n Le gestionnaire est complet \n "); exit(0); } if(dRC == GM_ERROR) { printf("\n Impossible de réaliser l'insertion \n "); exit(0); } printf("\n Voulez-vous introduire un autre message ? "); cRep = getchar(); fflush(stdin); } while(cRep != 'N'); if (cGM_Action == '3') { printf("\nAFFICHAGE DE TOUS LES MESSAGES "); printf("\n---------------------------------\n"); gmDisplay(&tyGestError, &dRC); printf("-----------------------------------\n"); if(dRC == GM_ERROR) { printf("\nErreur d'affichage\n "); exit(0); } } if (cGM_Action == '4') { printf("\nAFFICHAGE SELECTIF DES MESSAGES "); printf("\n---------------------------------\n"); gmDisplaySelectif(&tyGestError, &dRC); printf("-----------------------------------\n"); if(dRC == GM_ERROR) { printf("\nErreur d'affichage\n "); exit(0); } } if(cGM_Action == '15') { gmReInit(&tyGestError, &dRC); if(dRC == GM_ERROR) { printf("\n Initialisation incorrecte \n "); exit(0); } } } }
CoolD
Partager