Bonjour, je travaille sur un programme proposé par le livre C++, le guide complet, aux editions microapp.
Je travaille sur le troisieme et quatrieme chapitre et j'utilise un pointeur pour faire une allocation dynamique.
Le programme consiste à: entrer les caracteristiques d'une classe (noms, prenoms et moyenne des eleves).
Ensuite, un menu s'affiche et si l'on choisit 1, on a la classe qui s'affiche (ça, ça marche). Le 2 permet de modifier un élève, ça marche aussi. Le 3 permet d'afficher les moyennes d'un élève à travers un graphique.
La, je ne parviens pas à utiliser le pointeur que j'ai initalise à NULL.
Pouuriez vous m'aiser?
Je vous joint le code source de mon programme. Le problème est mis en gras
Merci.
Guillaume PAUL

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
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
#include <iostream>  //inclusion de fichier
#include <iomanip>
#include "GL/contGL/glut.h"
using namespace std;  //utilisation du namespace std
const int MAXTAILLECHAINE = 16; //taille max des chaines
//variable qui va contenir le nombre d'eleves
int NBELEVES;

//structure eleve
struct eleve 
{
	char nom[MAXTAILLECHAINE];  // Nom de famille de l'élève
	char prenom[MAXTAILLECHAINE];   // prenom de l'eleve
    float moyenne;  //moyenne de l'eleve
};

eleve *tab = NULL;   //tableau d'eleves declare global

void saisieeleve (eleve & param);		

//********************
//saisie d'un eleve
//*********************

void saisieeleve (eleve & param)    {
	cout << "entrez le nom : ";
	cin >>param.nom;  

	/*saisie du prenom*/
	cout <<"entrez le prenom : ";
	cin>>param.prenom;  //on saisit la chaine du prenom

	/*saisie de la moyenne*/
	cout<< "entrez la moyenne : ";
	cin>>param.moyenne;
	
	//system("pause");   //pause
}

void GraphiqueRedim();
void GraphiqueRedim(int x, int y)  {
	glViewport(10,10,x-20,y-20);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluOrtho2D(0.0,100.0,0.0,100.0);
}

void GraphiqueAffichage();
void GraphiqueAffichage()
{
	//definit la couleur de fond
	glClearColor(1.0, 1.0, 1.0, 1.0);

	//efface l'ecran
	glClear(GL_COLOR_BUFFER_BIT);
	glMatrixMode(GL_MODELVIEW);

	//toutes les instructions d'
	// affichage sont a placer ici
	glColor3d(0.0,0.0,0.0);  //passe en couleur noire

	//commence l'affichage d'une ligne brisee
	glBegin(GL_LINE_STRIP);

	//place tous les points
	for (int i=0; i<NBELEVES; i++)
		glVertex2d(i, tab[i].moyenne);

	//termine la ligne brisee
	glEnd();

	glFlush();  //Fin de l'affichage
}

void graphique();  //declaration
void graphique()  //definition
{  /*creation de la fenetre*/
	glutInitWindowPosition(10,10);  //position de la fenetre
	glutInitWindowSize(640, 480);  // taille de la fenetre
	// type d'affichages
	glutInitDisplayMode(GLUT_RGBA);
    glutInitDisplayMode(GLUT_SINGLE);
	//affichage de la fenetre
	glutCreateWindow("graphique");	/*gestion du graphique*/
	//specifie les fonctions 
	//d'affichage....
	glutDisplayFunc(GraphiqueAffichage);

	//.. de redimensionnement
	glutReshapeFunc(GraphiqueRedim);

	//lance la boucle de traitement GLUT
	glutMainLoop();
}

void main (void)
{  
tab= new eleve[NBELEVES];

cout<< "ecrivez le nomre d'eleves"   <<endl;
	cin >> NBELEVES; //l'utilisateur entre la taille


	// si l'allocation n'est pas possible,
	//arret du programme
	
	if (tab == NULL) { 
		cout << "erreur lors de l'allocation" 
			<< " du tableau d'eleves"<< endl;
		exit (0); 
	}

	//parcours des eleves un par un
    for (int i=0; i<NBELEVES; i++)
    {
		saisieeleve(tab[i]);  //Appel de la fonction de saisie
		
	}
	//cout<< "Fin de la saisie des "<< NBELEVES
	//	<< "eleves"<<endl;
	//system("pause");  //pause

	
	//variable de bouclage initialisee a vrai
	bool boucler = true;
	//repete le menu tant que "boucler" est vrai
	while (boucler)
	{

		//*************************
		//gestion du menu
		//*************************
		cout << "*****Menu******"<<endl;
		cout << "1-afficher la classe"<<endl;
		cout << "2-modifier un eleve"<<endl;
		cout <<"3-afficher le graphique"<<endl;
		cout << "4-quitter le programme"<<endl;

		int choix;
		cout <<"Entrez votre choix: ";
		cin >> choix;   //saisie du choix de l'utilisateur

		//choix correct exige
		while (!(choix >=1 && choix <= 4))  {
			cout << "choix incoorect ! "
					<<"veuilez le saisir a nouveau : ";
			cin>>choix; 
		}
	
		system("cls"); // efface le contenu de la console
	
		//commutateur pour traiter chaque cas
		switch(choix)  {
			case 1 : {	
				cout<< "1 -afficher la classe"<<endl;

				for (int i=0; i<NBELEVES; i++)
				cout <<setfill(' ')
				     << setw(2)<< i+1 <<":"
					 <<setw(20)<< tab[i].nom
					 <<setw(20)<< tab[i].prenom
					 <<setw(20)<< tab[i].moyenne<<endl; 

				break;

					 }
				
			case 2 : 
			{
				cout << "2 - modifier un eleve" <<endl;
				// saisie du numero de l'eleve
				cout << "entrez le numero de l'eleve: ";
				int num; cin >> num;

				//en cas de saisie de numero incorrect
				while (!(num>=1 && num<= NBELEVES)) {
					cout<< "incorrect ! "
					<< "veuillez entrer un numero juste : ";
				    cin>>num;
				}
				
				 // Appel de la fonction avec l'eleve d'indice num-1
					 saisieeleve (tab[num-1]);
					 break;

			}

			case 3 : {cout << " 3 - Afficher le graphiique"
							<<" "<<endl;
					graphique();
					break;
			}

			case 4 : {cout << "4 - quitter le programme"<< endl;
				     // le programme ne reviendra pas dans la boucle
					 boucler = false; 
					break;}
		}  //fin du commutateur switch
	}  //fin de la boucle while du menu
	
}