Getline() ne marche pas!
Résolu/Fermé
SHINTYMAN
Messages postés
113
Date d'inscription
vendredi 10 avril 2009
Statut
Membre
Dernière intervention
26 décembre 2014
-
27 nov. 2012 à 19:16
SHINTYMAN Messages postés 113 Date d'inscription vendredi 10 avril 2009 Statut Membre Dernière intervention 26 décembre 2014 - 28 nov. 2012 à 18:46
SHINTYMAN Messages postés 113 Date d'inscription vendredi 10 avril 2009 Statut Membre Dernière intervention 26 décembre 2014 - 28 nov. 2012 à 18:46
4 réponses
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
28 nov. 2012 à 08:32
28 nov. 2012 à 08:32
Salut,
essai le petit code mis en exemlpe à la fin de cette page :
https://en.cppreference.com/w/cpp/string/basic_string/getline
s'il fonctionne, le problème vient de quelque chose dans ton code, je dirais le "cin.clear()" qui fait tout planter.
S'il ne fonctionne pas, il y a un problème plus grave sur ton installation.
essai le petit code mis en exemlpe à la fin de cette page :
https://en.cppreference.com/w/cpp/string/basic_string/getline
s'il fonctionne, le problème vient de quelque chose dans ton code, je dirais le "cin.clear()" qui fait tout planter.
S'il ne fonctionne pas, il y a un problème plus grave sur ton installation.
SHINTYMAN
Messages postés
113
Date d'inscription
vendredi 10 avril 2009
Statut
Membre
Dernière intervention
26 décembre 2014
153
Modifié par SHINTYMAN le 28/11/2012 à 11:17
Modifié par SHINTYMAN le 28/11/2012 à 11:17
Bon, bonne nouvelle, le code que tu m'as passé marche. J'ai essayé d'ajouter les std:: devant les commandes, de déplacer la déclaration du string, de donner une valeur au string, et d'inverser les bibliothèques au début, mais rien y fait. J'ai aussi enlevé les cin.clear()... Voici le code maintenant (si tu veux le tester):
Donc voila, ça me plonge de plus en plus dans le désespoir de ne jamais voir ce code marcher....
En espérant avoir aidé,
SHINTYMAN
#include <string> #include <iostream> using namespace std; int main() { string nomJoueur("default"); int vie(20); int sexe(0); //0 = non renseigné; 1 = male; 2 = female cout << "Bonjour et bienvenue dans cette nouvelle aventure. Vous allez entrer... dans le Donjon de Molak'Bar!" << endl << "Avant de commencer, j'ai deux questions a vous poser:" << endl; do { cout << "Quel est votre sexe?" << endl << "Tapez 1 si vous etes un homme;" << endl << "ou 2 si vous etes une femme." << endl; cin >> sexe; if(sexe==1) { cout << "Ainsi, vous etes un homme..." << endl; } else if(sexe==2) { cout << "Donc vous etes une femme..." << endl; } else { cout << "Desole, mais " << sexe << " n'est pas la reponse attendue. Veuillez entrer une donnee correcte." << endl; } }while(sexe!=1 && sexe!=2); cout << "Et maintenant, quel est ton nom?" << endl; getline (cin,nomJoueur); cout << "Ton aventure commence donc, aventurier"; if(sexe==1) { cout << " " << nomJoueur << "."; } else { cout << "e " << nomJoueur <<"."; } cout << "Tu peux desormais entrer dans le Donjon..." << endl; return 0; }
Donc voila, ça me plonge de plus en plus dans le désespoir de ne jamais voir ce code marcher....
En espérant avoir aidé,
SHINTYMAN
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
28 nov. 2012 à 11:55
28 nov. 2012 à 11:55
J'ai un peu galéré, mais j'ai trouvé. L'erreur est expliqué ici : https://stackoverflow.com/questions/6642865/getline-not-asking-for-input
J'ai réussi à sauter l'erreur en utilisant un cin.ignore (comme la dernière solution du lien) juste avant le getline.
J'ai réussi à sauter l'erreur en utilisant un cin.ignore (comme la dernière solution du lien) juste avant le getline.
SHINTYMAN
Messages postés
113
Date d'inscription
vendredi 10 avril 2009
Statut
Membre
Dernière intervention
26 décembre 2014
153
28 nov. 2012 à 18:46
28 nov. 2012 à 18:46
Pour citer un personnage d'un jeu que j'ai beaucoup aimé (spyro II):
"CA MARCHE! CA MARCHEU!" Merci beaucoup Char Snipeur pour ton aide! Pour ceux qui n'ont pas compris, voici le code final (on ne sait jamais ;p ):
"CA MARCHE! CA MARCHEU!" Merci beaucoup Char Snipeur pour ton aide! Pour ceux qui n'ont pas compris, voici le code final (on ne sait jamais ;p ):
#include <string> #include <iostream> using namespace std; int main() { string nomJoueur("default"); int vie(20); int sexe(0); //0 = non renseigné; 1 = male; 2 = female cout << "Bonjour et bienvenue dans cette nouvelle aventure. Vous allez entrer... dans le Donjon de Molak'Bar!" << endl << "Avant de commencer, j'ai deux questions a vous poser:" << endl; do { cout << "Quel est votre sexe?" << endl << "Tapez 1 si vous etes un homme;" << endl << "ou 2 si vous etes une femme." << endl; cin >> sexe; if(sexe==1) { cout << "Ainsi, vous etes un homme..." << endl; } else if(sexe==2) { cout << "Donc vous etes une femme..." << endl; } else { cout << "Desole, mais " << sexe << " n'est pas la reponse attendue. Veuillez entrer une donnee correcte." << endl; } }while(sexe!=1 && sexe!=2); cout << "Et maintenant, quel est ton nom?" << endl; cin.ignore(256, '\n'); //repare l'erreur du getline() qui ne marche pas getline (cin,nomJoueur); cout << "Ton aventure commence donc, aventurier"; if(sexe==1) { cout << " " << nomJoueur << ".\n"; } else { cout << "e " << nomJoueur <<".\n"; } cout << "Tu peux desormais entrer dans le Donjon..." << endl; return 0; }