Bonjour,
Je souhaiterai saisir des vers, puis afficher ma strophe, comme ceci:
Voici une partie de mon (micro)projet.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 int main() { Strophe S1; cin >> S1; cout << S1 << endl; }
(j'ai supprimé les #include)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 class Vers { private: string suiteMots; string rime; public: Vers(); Vers(string s); Vers(string s, string r); virtual ~Vers(); virtual string getSuiteMots() const; virtual void saisie(istream& is); void affiche(ostream& os) const; }; ostream& operator<<(ostream& os, const Vers& v); istream& operator>>(istream& is, Vers& v);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 Vers::Vers(){} Vers::Vers(string sm){ suiteMots=sm;} Vers::Vers(string sm, string r) { suiteMots=sm; rime= r;} Vers::~Vers(){} void Vers::saisie(istream& is) { cout << "Entrez le vers." << endl; getline(is,suiteMots); } void Vers::affiche(ostream& os) const { os << "<<" << suiteMots << ">>";} ostream& operator<<(ostream& os, const Vers& v) { v.affiche(os); return os; } istream& operator>>(istream& is, Vers& v) { v.saisie(is); return is; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 class Strophe { private: Vers** suiteVers; int nbVers; public: Strophe(); virtual ~Strophe(); virtual void saisie(istream& is); virtual void affiche(ostream& os) const; }; ostream& operator<<(ostream& os, const Strophe& s); istream& operator>>(istream& is, Strophe& s);Au début lorsque je saisissai un vers, seul le premier mot était stocké.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 Strophe::Strophe(){suiteVers=NULL; nbVers=0;} Strophe::~Strophe(){if (suiteVers) delete[] suiteVers;} void Strophe::saisie(istream& is) { if (suiteVers) delete[] suiteVers; cout << "Entrer le nombre de vers : " << endl; is >> nbVers; suiteVers = new Vers*[nbVers]; for (int i=0; i<nbVers; i++) { Vers *v = new Vers(); v->saisie(is); suiteVers[i] = v; } } void Strophe::affiche(ostream& os) const { for (int i=0; i<nbVers; i++) { suiteVers[i]->affiche(os); os << endl; } } ostream& operator<<(ostream& os, const Strophe& s) { s.affiche(os); return os; } istream& operator>>(istream& is, Strophe& s) { s.saisie(is); return is; }
Après une petite recherche, j'ai compris fallait utiliser getline().
Sauf que maintenant j'ai un autre problème, lorsque je dis a mon programme que je veux saisir x vers. Il va laisser le 1er vide et me demander de saisir les x-1 autres...
Concrètement,
Je pense que le problème vient de mon "getline(is,suiteMots)" parce que si je le replace par "is >> suiteMots" je n'ai plus de ce problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Entrer le nombre de vers 3 // saisie au clavier Entrer le vers. Entrer le vers. Vers 1 // saisie au clavier Entrer le vers. Vers 2. // saisie au clavier // affichage de ma strophe <<>> <<Vers 1>> <<Vers 2>>
Quelqu'un peut m'éclairer?
Partager