Problème listes simplement chaînées C++

Fermé
gabbe2 Messages postés 14 Date d'inscription dimanche 10 avril 2011 Statut Membre Dernière intervention 20 mars 2014 - 19 févr. 2014 à 02:09
bubull97 Messages postés 133 Date d'inscription vendredi 1 octobre 2010 Statut Membre Dernière intervention 19 février 2014 - 19 févr. 2014 à 09:26
Bonjour,

je fais présentement un BAC en informatique, j'en suis à ma 2e session, sans avoir fait de programmation auparavant. J'ai un travail à effectuer par rapport aux listes chaînées et aux pointeurs, et bien que je croyais comprendre, ce n'est finalement pas le cas!

En fait, j'ai ces deux struct:


struct cours
{
string sigle;
cours* suivant;
};

struct Professeur
{
string nom;
int ancien;
cours* listedecours;
Professeur* suivant;
};

cours * courantCours; //pointeur courant de la liste de cours
Professeur * tete; //tete de chaine
Professeur * courant; //pointeur courant de la liste de professeurs


J'ai donc une liste de professeurs avec leur noms, leur ancienneté, et une liste des cours auxquels chacun est assigné, et bien sur le pointeur suivant.

Je dois créer cette liste chaînée à partir d'un fichier de ce type:

Prenom Nom (string)
ancienneté (entier)
sigle cours 1 (string)
sigle cours 2 (string)
...
&
Prenom Nom (string)
ancienneté (entier)
sigle cours 1 (string)
...
&

Les cours peuvent se retrouver dans la liste de plus d'un professeur.

Il serait aussi probablement important de mentionner que mes struct et mes méthodes se retrouvent dans la classe DossierProfesseur, dont le constructeur demande de créer la liste chaînée.

Cela dit, j'ai commencé à créer ma liste chaînée, mais lorsque je l'affiche pour vérification, seul le dernier cours de la liste de chaque professeur s'affiche. Voici mon code, qui doit être "tout croche", compte tenu que je débute en programmation et que les pointeurs, ce n'est pas mon fort! :P


string passer;
ifstream ifile;

ifile.open(FP); //FP contient le nom du fichier (ex: FP.txt)
if (!ifile)
{
cout << " Erreur d'ouverture du fichier ";
}
courant=tete=new Professeur;

while(!ifile.eof())
{
string sigle ="";
getline(ifile, courant->nom);
ifile >> courant->ancien;
courant->listedecours=new cours;
while(sigle!="&" && !ifile.eof()) //tant qu'on ne rencontre pas '&' et la fin du fichier
{
ifile >> sigle;
if (sigle != "&")
{
courant->listedecours->sigle = sigle;
courant->listedecours->suivant=new cours;
}
}
getline(ifile, passer); //Si curseur toujours positionné à '&'
courant->listedecours->suivant=NULL;
courant->suivant=new Professeur;
courant=courant->suivant;
}
courant->suivant=NULL;

Je n'arrive plus à trouver les erreurs tellement j'ai essayé de choses, mais je me demande s'il ne faudrait pas que je me crée un : cours * courantCours; pour remplacer courant->listedecours.

Merci de bien vouloir m'aider, je suis un peu désespérée! (:

1 réponse

bubull97 Messages postés 133 Date d'inscription vendredi 1 octobre 2010 Statut Membre Dernière intervention 19 février 2014 10
19 févr. 2014 à 09:26
Salut!

Alors pour commencer, ta déclaration de structure est fausse.
De plus, ton code est faux aussi. J'ai pas tout regardé mais tu ne déclare pas tes variables.

Structure
struct cours
{
string sigle;
struct cours* suivant;
}cours;
struct Professeur
{
string nom;
int ancien;
cours* listedecours;
struct Professeur* suivant;
}professeur;

Ensuite déclare tes variable.
Exemple:
cours monCoursN1 = new cours();
Mais je ne suis pas sûr que tu puisses faire un new sur une structure. Je n'ai jamais fais de C++, mais j'ai fais énormément de C.
0