Problème de lecture de fichier C++

Résolu/Fermé
Jerry21 Messages postés 104 Date d'inscription mercredi 10 avril 2002 Statut Membre Dernière intervention 8 juin 2008 - 24 avril 2005 à 19:01
 jerry21 - 26 avril 2005 à 04:05
Bonjour à tous les Geek de C++ .

Vous seriez bien aimable de répondre à mes interrogations. Voici le problème : J'ai un code en C++ qui ouvre un fichier et qui lit les information jusqu'a FinDuFichier mais mon problème est qu'il ne la trouve pas donc boucle sans fin. Mon fichier a été créer avec blocnote (texte brut) , mon code avec editPlus. Le tout compilé sous Sun
voici le code :

#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

struct etudiant
{
string codePerm;
string nom;
string prenom;
int notes[6];
int notef;
char cote;
struct etudiant* Psuivant;
};

typedef
struct etudiant* TypePointeur;

TypePointeur Ptete, Pnouveau, Pactuel;

int main()
{
struct etudiant listeEtudiant;
ifstream Fetudiant;
int cpt;

Ptete = NULL;
Fetudiant.open("list.txt");
if(Fetudiant.fail())
{
cout << "Impossible d'ouvrir le fichier etudiant.dat";
exit(1);
}


while(!Fetudiant.eof()) // ICI le programme boucle sans fin
{
cout<<"etape 1";
Pnouveau = new etudiant;

Fetudiant >> Pnouveau->codePerm >> Pnouveau->nom >> Pnouveau->prenom >> Pnouveau->notes[0] >>
Pnouveau->notes[1] >> Pnouveau->notes[2] >> Pnouveau->notes[3] >>
Pnouveau->notes[4] >> Pnouveau->notes[5];
Fetudiant.ignore(256,'\n');

Pnouveau->notef = 0;
for(cpt=0;cpt<6;cpt++)
{
cout<<"etape 2";
Pnouveau->notef = Pnouveau->notef + Pnouveau->notes[cpt];
}

if(Pnouveau->notef >= 90)
Pnouveau->cote = 'A';
else if((Pnouveau->notef < 90) && (Pnouveau->notef >= 80))
Pnouveau->cote = 'B';
else if((Pnouveau->notef < 80) && (Pnouveau->notef >= 70))
listeEtudiant.cote = 'C';
else if((Pnouveau->notef < 70) && (Pnouveau->notef >= 60))
Pnouveau->cote = 'D';
else
Pnouveau->cote = 'E';

if(Ptete == NULL)
{
Pnouveau->Psuivant = NULL;
Ptete = Pnouveau;
Pactuel = Pnouveau;
}
else
{
Pnouveau->Psuivant = NULL;
Pactuel->Psuivant = Pnouveau;
Pactuel = Pnouveau;
}

}

if(Ptete != NULL)
{
Pactuel = Ptete;
}

while(Pactuel != NULL)
{
cout<<"etape 3";
cout << Pactuel->codePerm << " " << Pactuel->nom << " " << Pactuel->prenom << " " << Pactuel->notef
<< " " << Pactuel->cote << endl;
Pactuel = Pactuel->Psuivant;
}


return 0;

}


A voir également:

4 réponses

crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 506
24 avril 2005 à 20:42
Salut,
Les fichiers sont créés sous quel OS ?
La compil est sous Sun mais quel OS et compilateur ?
A+, crabs
0
sunOs 5.7
J'ai créer le code sous windows xp avec un éditeur de texte editplus. Je ne connais pas la version du compilateur connais tu une commande sous Unix qui donne cette information? La commande que j'utilise pour compiler est :
$g++ nomFichier.cpp -o nomExecutable.out
J'ai aussi essayé de compiler sous Linux mandrake 9.2 mais sans succès.

Merci
0
J'ai compilé et fait tourné ton code chez moi, y'a des petites couilles, mais au global ça marche.

A mon avis regarde du coté du fichier de donnée.

Ce que j'ai vu :
- Il manque beaucoup de '\n'
- Tu ouvre le fichier "list.txt", le message d'erreur concerne "etudiant.dat"
- L'étape 3 affiche une "moyenne" de trop. (probablement parcequ'il repasse une fois dans la boucle avant la fin de fichier).
0
Merci beaucoup de ton aide !!
En faite le problème était , comme tu la mentionné dans le fichier.dat. Dans le fichier il y avait une ligne vide à la fin du fichier.

Dsl c'était un erreur code 12 ... (12 pouce en avant de l'écran)

merci
0