Aide en c++

Signaler
Messages postés
3
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
12 mai 2004
-
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
-
j'ai besoin d'aide en c++. je dois écrire un programme qui puisse lire dans un fichier texte du type
titre
annee,edition,Nbrepage,Pachat,pvente,copieachete,cpievendu.
la premiere ligne du fichier contient le titre et la deuxièeme contient les elements tels que mentionné avec des espaces.
pour pouvoir afficher un titre à l'écran il faut que (pvente*cpievendu)-(pachat*cpieachete)>=10000.
j
#include<fstream>
#include<string>

using namespace std;

void main (void)

{
ifstream FLecture;
string titre;
int Annee,Nombre_page,Nombre_copie_achete,Nombre_copie_vendu;
float Prix_achat,Prix_vente;

cout<<"Entrez une annee au clavier"<<endl;
cin>>Annee;

FLecture.open("LIVRES.txt");

if(FLecture.fail())

{
cout<<"Probleme d'ouverture"<<endl;
}
else
{
getline(FLecture,titre);


while(!FLecture.eof())

{

FLecture>>Annee;
FLecture>>Nombre_page>>Prix_achat>>Prix_vente>>Nombre_copie_achete>>Nombre_copie_vendu;
if((Annee==1971) && ((Prix_vente*Nombre_copie_vendu) - (Prix_achat*Nombre_copie_achete))>=10000)

cout<<titre<<endl;
getline(FLecture,titre);
//FLecture>>Annee;
//FLecture>>Nombre_page>>Prix_achat>>Prix_vente>>Nombre_copie_achete>>Nombre_copie_vendu;

}

FLecture.close();

}

}

5 réponses

Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
c koi le probleme à l'execution?

int main() en c++ et ifstream FLecture("LIVRE.txt"); c'est mieux, FLecture.close(); n'est pas necessaire
Messages postés
15
Date d'inscription
mercredi 10 mars 2004
Statut
Membre
Dernière intervention
15 décembre 2005

Le critère Annee == 1971 est il nécessaire à la sélection?
Car tu ne l'as pas mentionné dans ton énoncé.

et effectivement, c'est int main() qui te fait un return 0 en cas de succès.
Messages postés
3
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
12 mai 2004

le problème à l'exécution c'est que j'obtiens une boucle sans fin.Je ne comprends pas pour quoi.
Le critère Annee==1971 est nécessaire j'ai oublié de le mentionner dans mon énoncé.
En fait les condition qui doivent être respectées sont l'année doit être 1971 et la formule que j'ai donné précédemment doit être respectée (car le livre sera considéré comme rentable pour le libraire).En fait on est dans le répertoire d'un vendeur de livre on cherche ceux qui ont été édités en 1971 et qui ont la particularité de vérifier la formule de rentabilité que je vous ai donné.
Voilà tout mon problème
Messages postés
15
Date d'inscription
mercredi 10 mars 2004
Statut
Membre
Dernière intervention
15 décembre 2005

Il semblerait que ta fin de fichier ne soit pas détectée par ton FLecture.eof()

Une alternative simple, c'est de mettre un marqueur particulier en fin de fichier , du genre [FIN] sur la dernière ligne.

Ainsi, au lieu de tester la fin de fichier, il te suffit de comparer la chaîne lue avec la chaîne "[FIN]".

Ceci te permet de contourner le test qui semble poser des problèmes, tout en te permettant si besoin est de réduire la quantité d'oeuvres testées en mettant un [FIN] en milieu de fichier. (si tu veux par exemple étendre le traitement sur plusieurs jours, tu peux même t'offrir le luxe de rajouter un marqueur [DEBUT] ).

En espérant que ceci pourra t'aider.

Si tu comptes vraiment utiliser eof() , essaie d'afficher la ligne lue à chaque passage dans la boucle, pour voir si elle devient stationnaire à un moment.
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
mais vous avez pas compris que eof ca indique pas si la lecture a ete faite

while( getline(FLecture,titre) )
{
...
}

ou test FLecture mais tient compte tu test eof seulement si ca a foiré