Problème de lecture de fichier C++
Résolu
Jerry21
Messages postés
104
Date d'inscription
Statut
Membre
Dernière intervention
-
jerry21 -
jerry21 -
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;
}
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:
- Problème de lecture de fichier C++
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
4 réponses
Salut,
Les fichiers sont créés sous quel OS ?
La compil est sous Sun mais quel OS et compilateur ?
A+, crabs
Les fichiers sont créés sous quel OS ?
La compil est sous Sun mais quel OS et compilateur ?
A+, crabs
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
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
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).
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).