Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec cin.getline(), idem avec getline()

en essayant d'ameliorer le prog du cours

    2 mars 2008 à 22:34:49

    Bonjour à tous :) .
    J'essaie de modifier le prog du cours de C++ (au niveau des classes), le mini-rpg.
    Au lieu de faire se battre David et Goliath "dans le code", je voudrais faire une petite interface utilisateur, qui permettrais par exemple, d'être David, et d'attaquer goliath, boire une petite potion de vie... etc-, Selon le choix du mec qui execute le programme.
    Malheuresement, je rencontre quelques problèmes, pour recupèrer le nom d'une arme, celle de David. Je n'ai modifié que le main.cpp, que voici :

    1. #include <iostream>
    2. #include <string>
    3. #include "Personnage.h"
    4. using namespace std;
    5. /*Personnage david, goliath;
    6. void afficherLeurEtat()
    7. {
    8.     cout << "David" << endl;
    9.     david.afficherEtat();
    10.     cout << endl << "Goliath" << endl;
    11.     goliath.afficherEtat();
    12. }*/
    13. int main()
    14. {
    15.     int menuItem = 0;
    16.     Personnage david, goliath;
    17.     cout << "----- Menu ----" << endl;
    18.     cout << "1.Combat Avance" << endl;
    19.     cout << "2.Combat Rapide" << endl;
    20.     cin >> menuItem;
    21.     if (menuItem = 1)
    22.     {
    23.         //cout << "Création de deux personnages" << endl;
    24.         // c'est ici que ça nous interresse
    25.         char armeDavid[50];
    26.         char armeGoliath[50];
    27.         cout << "Veuillez entrer l'arme de David:" << endl;
    28.         cin.getline (armeDavid,50);
    29.         cout << "Veuillez entrer l'arme de Goliath: " << endl;
    30.         cin.getline (armeGoliath,50);
    31.         cout << "david: " << armeDavid << endl;
    32.         cout << "goliath: "<< armeGoliath << endl;
    33. //jusque là.
    34.    //     Personnage david(armeDavid, nbDegatsDavid), goliath(armeGoliath, nbDegatsGoliath);
    35. //        cout << "Les personnages ont ete crees avec succes :" << endl;
    36.        // afficherLeurEtat();
    37.     }
    38.     else {
    39.         // Création des personnages
    40.         Personnage david, goliath("couteau de magie", 10);
    41.         // Au combat !!
    42.         goliath.attaquer(david);
    43.         david.boirePotionDeVie(20);
    44.         goliath.attaquer(david);
    45.         david.attaquer(goliath);
    46.         goliath.changerArme("Lame acharnée", 20);
    47.         goliath.attaquer(david);
    48. //        afficherLeurEtat();
    49.     }
    50.     return 0;
    51. }

    J'ai commenté beaucoup de code ici, voire supprimé (mais surtout arrangé), pour éviter d'influencer mon code qui pose problème.
    La compilation ce passe bien(Intel C++ compiler de code::blocks) , je lance le programme:
    leo@debian:~/prog/projects/rpg$ ./RPG
    ----- Menu ----
    1.Combat Avance
    2.Combat Rapide
    1
    Veuillez entrer l'arme de David:
    Veuillez entrer l'arme de Goliath: 
    arme de la mort
    david: 
    goliath: arme de la mort

    Le problème etant que je ne peux pas rentrer de phrase pour David...
    Vous me demanderez surement: "pourquoi t'utilise pas cin << ?" - Tout simplement parce-que je veux pouvoir entrer plusieurs mots, car cin ne prends que le premier.
    J'ai le même problème en utilisant getline(cin, armeDavid, '\n'); et getline(cin, armeGoliath, '\n'); , je ne peux rien rentrer pour david, il passe tout de suite a goliath.
    Et ce qui est très bizarre, c'est que si je met le code tout seul (que je compile avec g++):
    1. #include <string>
    2. #include <iostream>
    3. using namespace std;
    4. int main()
    5. {
    6.         char armeDavid[50];
    7.         char armeGoliath[50];
    8.         cout << "Veuillez entrer l'arme de David" << endl;
    9.         cin.getline (armeDavid,50);
    10.         cout << "Veuillez entrer l'arme de Goliath: " << endl;
    11.         cin.getline (armeGoliath,50);
    12.         cout << "david: " << armeDavid << endl;
    13.         cout << "goliath: "<< armeGoliath << endl;
    14. return 0;
    15. }

    J'obtiens le résultat que je voudrais :
    Veuillez entrer l'arme de David
    arme de la mort
    Veuillez entrer l'arme de Goliath: 
    arme de la mort qui tue tres vite
    david: arme de la mort
    goliath: arme de la mort qui tue tres vite

    Si quelqu'un sais ce qu'il se passe, et comment régler ce leger problème (J'y ai passé que 4h aujourd'hui avec toutes les manières de proceder)... !

    Merci a tous :).
    • Partager sur Facebook
    • Partager sur Twitter
      2 mars 2008 à 22:45:32

      Faut vider ce qui reste de la ligne après un >>
      (FAQ C++ de developpez (comme d'hab'))
      • Partager sur Facebook
      • Partager sur Twitter
      C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
        2 mars 2008 à 22:55:08

        J'me sens tout con.. merci !
        • Partager sur Facebook
        • Partager sur Twitter

        Problème avec cin.getline(), idem avec getline()

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown