IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

probleme pointeur debutant


Sujet :

C++

  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1
    Par défaut probleme pointeur debutant
    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
    	
    }

  2. #2
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    J'ai regardé très brièvemment du fait que un, la présentation est quasi-illisble, et deux, c'est pas du C mais du C++. Il y a un forum dédié pas très loin.

    Ce que j'ai constaté rapidement, c'est une mauvaise utilisation de ton pointeur sur structure:
    Comment utiliser un pointeur sur une structure ?

  3. #3
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    tab= new eleve[NBELEVES];
     
    cout<< "ecrivez le nomre d'eleves"   <<endl;
    	cin >> NBELEVES; //l'utilisateur entre la taille
    Ici tu crées un tableau de taille ?? (indéterminé) NBELEVES n'étant pas initialisé.

    Tu peux t'en sortir en utilisant mieux l'allocation dynamique mais le mieux (surtout plus sur et plus C++) serait d'utiliser un vector de cette façon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include <vector>
     
    using namespace std;
     
    cout<< "ecrivez le nomre d'eleves"   <<endl;
    cin >> NBELEVES; //l'utilisateur entre la taille
     
    vector<eleve> tab(NBELEVES); //ou vector<eleve*> selon ce que tu veux en faire

Discussions similaires

  1. Probleme inconnu... [debutant]
    Par The_Zarabe dans le forum C
    Réponses: 8
    Dernier message: 27/10/2005, 20h31
  2. Probleme Pointeur - API
    Par syannic dans le forum C
    Réponses: 18
    Dernier message: 10/10/2005, 10h51
  3. quelques problemes de debutant avec count
    Par shirya dans le forum Langage SQL
    Réponses: 4
    Dernier message: 20/09/2005, 23h14
  4. probleme de debutant sous access
    Par guili dans le forum Access
    Réponses: 8
    Dernier message: 23/06/2005, 17h39
  5. Problème pour debuter avec glut
    Par ismael14 dans le forum GLUT
    Réponses: 2
    Dernier message: 26/07/2004, 11h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo