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 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)++;
 
}
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
 
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;
}
mais j'ai des problémes avec la fonction d'affichage selectif
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
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);
			}
		}
	}
}
Voila je sais qu'il ya pas mal d'erreurs, je n'arive pas à me corriger. Merci de votre aide
CoolD