Résolu C++

Solutions (3)
Tags :
  • element
  • Programmation
|
:??:  slt g un prb avc ls listes, j ne sasi pas pourquoi si je fais mes enregisrement,au niveau de l'affichage:il m'affiche au nivo des 2 champs nom_e et pnom_e,il me repete les dernieres saisies,par contre, o niveau de la note,il n'ya pas de probleme. voici le code:

#include <iostream>
#include <stdlib.h>

using namespace std;


struct Etudiant
{
char nom[22];
char pnom[22];
int note;
Etudiant * suivant;

};

Etudiant * liste = NULL;



void Afficher()
{

Etudiant * element = liste;
while(element != NULL)
{

cout << element->nom <<endl;
cout << element->pnom << endl;
cout << element->note << endl;
element = element->suivant;

}
cout << endl;

}
void Ajouter ( char nome[22], char pnome[22], int notee)
{

Etudiant * element= new Etudiant;

element->nom=nome;
element->pnom =pnome;
element->note = notee;

element->suivant = liste;

liste = element;

}
int note_e; char nom_e[22],pnom_e[22], o= 'y';
int main(int argc, char *argv[])
{
while (o !='n')
{
cout<<"rentrer le nom";
cin>> nom_e;
cout<<"rentrer le prenom";
cin>> pnom_e;
cout<<"rentrer la note";
cin>> note_e;
cout<<"voulez vous ajouter";
cin>>o;
Ajouter( nom_e,pnom_e,note_e);

}

Afficher();
system("PAUSE");
return 0;
}
Contenus similaires
Meilleure solution
partage
|
Déjà, en C++ on fait une vrai classe. :) 

Ensuite, un char[22] est comme un char *, c'est un pointeur sur une chaine de caractères.
Et quand on veut copier un tableau, on ne se contente pas de récupérer uniquement l'adresse mémoire du tableau, parce que justement on ne fait pas de copie. Pour copier un tableau on copie la mémoire élément par élement. C'est la même chose avec une chaine de caractères, on copie caractère par caractère.
Tu as la fonction C ANSI strcpy(destination, source) qui copie une chaine de caractère.

Dans ta fonction Ajouter, tu copies l'adresse mémoire, donc tous tes objets de type Etudiant pointent finalement sur la même adresse mémoire. Cette adresse est celle donnée en paramètre, et ce sont donc tes variables nom_e et pnom_e.
Normalement, si après l'appel à Afficher(), tu refais un cin >> nom_e, et que tu appelles à nouveau Afficher() sans faire de Ajouter(..), tous devraient afficher le dernier entré, puisque tous les pointeurs pointent sur l'adresse mémoire de nom_e.
Utilise donc des strcpy sur toutes les copies de chaines de caractères.

Ou alors, en C++ STL, utilise l'objet string qui fait implicitement les copies lors des appels à opérateur d'assignation.
  • Commenter cette solution |
Score
0
òh
òi
, Ex-AdMiN |
Le langage SMS est interdit sur le forum, merci.
  • Commenter cette réponse |
Score
0
òh
òi
|
merci g teste ca marche.slt
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS