besoin d'aide en c++

besoin d'aide en c++ - C++ - Programmation

Marsh Posté le 26-11-2009 à 19:51:16    

Bonjour à tous,
 
Voilà ,j'ai un petit problème en programmation c++. Je cherche à lire un fichier .txt qui contient pour chaque ligne, un nom de livre ainsi que le nom de l'auteur, les deux éléments étant séparés par un "$". Je cherche pour le moment simplement à lire le nom du livre de la première ligne.
Voici ce que j'ai trouve jusqu'à présent:
 
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
using namespace std;
 
int main (int argc, char*const argv[]){
 
string a;
int b;
string titre;
int nb_livres;
ifstream fin ("livres.txt" );
fin>>nb_livres;
for (b=0;b<nb_livres; b++){
string titre="";
while(a!="$" ){
fin>>a;
titre=titre+a+" ";
}
cout<<titre<<endl;
}
cout<<endl;
system("pause" );
return 0;
}
 
 
Seulement, cela ne fonctionne pas, j'aimerais donc savoir pourquoi et avoir vos conseils pour continuer à lire la suite du fichier et ranger chaque élément (titre et nom) dans un tableau.
Merci d'avance et à bientôt,
Michael


Message édité par mickael006 le 26-11-2009 à 19:51:47
Reply

Marsh Posté le 26-11-2009 à 19:51:16   

Reply

Marsh Posté le 26-11-2009 à 20:26:17    

Salut
 
tu devrais selon moi lire une ligne complète avec std::getline (je ne sais pas où s'arrête operator>> )
http://www.cplusplus.com/reference/string/getline/
Puis rechercher $ dedans (je suppose que les titres et les auteurs ne peuvent pas contenir $) avec std::string::find ou quelque chose dans le genre et ensuite découper avec std::string::substr
http://www.cplusplus.com/reference/string/string/
 
à mon avis quand tu fais

Code :
  1. fin>>a;

il lit toute la ligne (ou il s'arrête au premier espace?) donc a n'est jamais égal à "$" (tout seul). Cela pourrait peut-être marcher si a était un caractère, mais lire caractère par caractère...

Code :
  1. system("pause" );

berk.


---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le 26-11-2009 à 20:55:04    

>> s'arrete au premier caractere d'espacement.
std::getline est la façon préconisée de proceder

Reply

Marsh Posté le 26-11-2009 à 21:02:23    

C'est bien ce que je pensais mais j'avais peur de confondre avec scanf.


---------------
deluser --remove-home ptitchep
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed