Partage
  • Partager sur Facebook
  • Partager sur Twitter

cin successifs, string et espaces

Sujet résolu
    9 juin 2007 à 20:15:20

    Bonsoir,

    J'ai une sorte de formulaire où je demande diverse informations à l'utilisateur et quand j'ai tout je met tout ca en forme dans un fichier.

    Le problème est que quand je tape quelque chose avec des espaces il ne le prend pas comme une seule chaine mais comme plusieures.

    Exemple : "Je vais boire" se mettra dans 3 variables ... o_O

    voici la structure de mon code
    cout << "\nQuestion";
    cin >> var1;

    cout << "\nQuestion";
    cin >> var2;


    Et ca se répete une vingtaine de fois et quand je tape qulque chose avec des espaces le premier mot vas à la bonne variable mais le second vas dans la deuxieme etc!

    Je voudrais tout mettre dnas le même et avec les espaces.

    Déjà est-ce possible?
    Et si oui, où est mon erreur/comment faire?

    Merci.
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      9 juin 2007 à 20:23:49

      salut,

      utilise getline.

      Son fonctionnement :

      cout << "Question : ";
      getline(cin, var1);


      Xav57
      • Partager sur Facebook
      • Partager sur Twitter
        9 juin 2007 à 20:41:04

        Merci mais comment faire si je veux stocker une variable de type int ? getline ne marche pas avec les int et si je fait ca :

        cout << "Question -> reponse par 1 ou 0";
        cin >> var_int;

        if(var_int) {
        cout << "Question";
        getline(cin, var);// Ce getline est sauté et ca passe à la question d'après
        }

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          9 juin 2007 à 21:24:08

          Là, je comprend pas bien ce que tu veut faire. Pour moi, ton var_int est un booléen, et si var est un entier, ton code ne devrait pas compiler car getline ne marche qu'avec des string !

          Montre une fois le code en entier.
          • Partager sur Facebook
          • Partager sur Twitter
            9 juin 2007 à 21:29:48

            Le code fait plus de 250 lignes donc j'ai viré tout les questions etc..

            #include <iostream>
            #include <fstream>
            #include <string>

            using namespace std;

            int main(){

            string nom_script, nom_jeu, editeur, site_editeur, pseudo, fichier_setup, fichier_a_telecharger, message_telechargement, cible_deplace, executable, format, nom_fichier, ligne, path_executable;
            bool cdrom, telecharger, deplace, compresse, ok, existe;

            cout << "\nEntrez votre pseudonyme : ";
            getline(cin,  pseudo);

            cout << "\nLe jeu s'installe depuis un CDROM ? (1 pour OUI, 0 pour NON) : ";
            cin >> cdrom;

            if (cdrom){

                    cout << "\nEntrez le chemin vers le fichier d'install sur le CDROM (ex: setup.exe) n'oubliez pas de mettre les sous dossiers si necessaire : ";
                    getline(cin,  fichier_setup);

            }

            }


            Ce code compile mais il saute le getline dans le if (cdrom){
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              9 juin 2007 à 21:40:23

              Logiquement, un chemin d'installation ne comporte pas d'espace, donc un cin >> fichier_setup; suffit.
              • Partager sur Facebook
              • Partager sur Twitter
                9 juin 2007 à 21:42:34

                Lol non tu peut très bien avoir un dossier avec un espace sur le CD ! et puis y'as pleins de question encore après!

                Donc ca résoud pas le problème
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  9 juin 2007 à 21:57:05

                  J'ai trouvé !!!

                  En fait, il faut vider le buffer de cin avant d'utiliser le getline.
                  Pour le faire, avant le getline, tu mets : cin.sync(); et ça marchera !

                  Xav57
                  • Partager sur Facebook
                  • Partager sur Twitter
                    9 juin 2007 à 22:01:05

                    Avant chaque getline?

                    EDIT:

                    cout << "\nEntrez votre pseudonyme : ";
                    cin.sync();
                    getline(cin,  pseudo);
                    cin.sync();

                    cout << "\nLe jeu s'installe depuis un CDROM ? (1 pour OUI, 0 pour NON) : ";
                    cin.sync();
                    cin >> cdrom;
                    cin.sync();

                    if (cdrom){

                            cout << "\nEntrez le chemin vers le fichier d'install sur le CDROM (ex: setup.exe) n'oubliez pas de mettre les sous dossiers si necessaire : ";
                            cin.sync();
                            getline(cin,  fichier_setup);

                    }


                    Même avec tous ces getline il veut pas o_O
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      9 juin 2007 à 22:26:38

                      t'a juste besoin de le mettre après avoir utilisé cin.

                      Le code que tu a mit, il marche chez moi, meme avec tous les cin.sync() que tu a mis, mais un cin.sync() juste après le cin>>cdrom suffit !
                      • Partager sur Facebook
                      • Partager sur Twitter
                        9 juin 2007 à 22:36:24

                        Ben chez moi non .... :/ mais de toute facon je demande de mettre "oui" ou "non" donc c'est bon problème réglé

                        Tu utilise Windows?
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          9 juin 2007 à 22:39:04

                          oui, en ce moment je suis sur vista, mais je vais essayer sur une debian pour voir

                          effectivement, sa ne marche pas. Ca doit venir du compilateur
                          • Partager sur Facebook
                          • Partager sur Twitter
                            10 juin 2007 à 0:20:28

                            J'avais pourtant déjà donné le lien cette semaine. :-/
                            http://c.developpez.com/faq/cpp/?page=SL#SL_get_string_line

                            Lis bien tout. En particulier l'avant dernier paragraphe ("À noter").

                            PS: sync ne sert absolument pas à ça.
                            • 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.
                              10 juin 2007 à 0:24:29

                              Merci! (même si j'ai résolu autrement) je m'en servirai dans ma prochaine version je pense ;)
                              • Partager sur Facebook
                              • Partager sur Twitter

                              cin successifs, string et espaces

                              × 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