Partage
  • Partager sur Facebook
  • Partager sur Twitter

Entrée sélective de variable

question de noob...

    21 septembre 2007 à 20:19:01

    J'ai besoin d'aide, je commence en C++ et je me demandait comment empecher l'entrée d'une variable autre que celle rechercheé
    par exemple si dans le code suivant, je demande a l'utilisateur d'entrer son nom, je ne veut pas qu'il puisse entrer des chiffres (ou plutot, que si il en entre, que le programme lui redemande d'entrer son nom...)
    J'ai cherché un peu, histoire de pas faire trop l'imbécile, mais j,ai rien trouvé de concluant..

    1. cout << "\nEntrez le nom du client: " ;
    2. cin >> Nom;


    la variable nom est déclarée comme étant "string" mais ca n'empeche pas l'entrée d'un chiffre...
    j'aimerais savoir l'inverse aussi, qu'il soit impossible d'écrire du texte quand on demande un chiffre.

    Merci!
    • Partager sur Facebook
    • Partager sur Twitter
      21 septembre 2007 à 20:30:14

      C'est pas possible directement comme ça.

      Par contre tu peux tester toi-même le contenu de la réponse et vérifier si elle correspond aux critères demandés.
      • Partager sur Facebook
      • Partager sur Twitter
      Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
        21 septembre 2007 à 20:36:25

        pas nécessairement directement comme sa, mais dans une boucle while()
        ou jsais pas..

        mais comment tester le contenu quand c'est une reponse complètement variable (genre un nom différent a chaque fois)...
        • Partager sur Facebook
        • Partager sur Twitter
          21 septembre 2007 à 20:43:04

          en fait un nombre est une string...

          "20" c'est '2' et '0' et '\0'

          valide si chaque caractères sont entre 'a' et 'z' et 'A' et 'Z'... sinon repose ta question

          (Il y a des techniques ultra-portable avec les locale mais commence avec ça pour pratiquer)
          • Partager sur Facebook
          • Partager sur Twitter
            21 septembre 2007 à 21:25:47

            non ce que je veut, c'est pouvoir identifier si ce qui a été entré est bien des lettres et non des chiffres (ainsi que l'inverse)

            je veut empecher l'utilisateur d'entrer par exemple "4342" au lieu de son nom... (regarde le code plus haut)

            je dois construire quelquechose autour de sa.
            • Partager sur Facebook
            • Partager sur Twitter
              21 septembre 2007 à 21:29:22

              Je suis sur que tu as une idée comment faire si je te dis que tu peux tester chaque caractère de ta string un par un. Il te suffit de tester si le caractère est >=0 et <=9, si c'est le cas c'est un nombre.
              • Partager sur Facebook
              • Partager sur Twitter
              Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
              Anonyme
                21 septembre 2007 à 22:25:11

                1. #include <iostream>
                2. #include <string>
                3. #include <sstream>
                4. using namespace std;
                5. int main(void)
                6. {
                7. string temp; int var=0,err=1;
                8. do
                9. {
                10.     cout<<"Entrer un nombre"<<endl;
                11.     getline(cin,temp); //on récupère l'entrée sur cin dans temp.
                12.     istringstream tampon(temp); //on crée un istringstream avec comme paramètre la string qui contient la valeur de rentré dans cin.
                13. //Après on teste si l'extraction de la valeur contenue dans tampon va bien dans var.
                14. //Si ca marche bien , il ya incripttion de la valeur du tampon dans var.
                15. //sinon je ne sais pas ce qui se passe(Il faut que je matte ca dans la norme).
                16.     if(tampon>>var)
                17.     err  = 0; //ensuite on positionne err pour continuer a boucler ou non si l'extraction c'est bien passé.
                18.     else
                19.     err = 1 ;
                20. }
                21. while(err); //on boucle
                22. cout<<"Merci pour " << var <<endl; //on affiche
                23. cout<<"End"<<endl;
                24. return 0;
                25. }


                Le principe est le même pour des strings ou autre.
                Pose des questions si tu pige pas.

                NB: tu peut enchainer les extractions.
                Exemple temp contient "10 bac"
                Tu peut alors faire tamppon>>var>>mystring ou var est de type int et mystring de type std::string.
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  21 septembre 2007 à 22:27:54

                  Tu peux indiquer ce que fais ton code avec des commentaires, car là moi je pige pas... Merci.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    21 septembre 2007 à 22:47:43

                    Meme chose, des commentaires serait bienvenus!
                    Bien que je comprenne la structure du programme (J'ai quand même 7 ans d'expérience en Basic(pas VB)) et ce qu'il fait, certaine commande me déroute, merci!

                    mais bon, je croit pouvoir en venir a quelquechose. Et avec ce que Nanoc a dit, je croit bien pouvoir faire des test concluants *y travaille*

                    Idalement, l'utilitée est de savoir si l'utilisateur a bien entré son nom, et non des chiffres... (ou l'inverse... dans le cas ou je lui demande par exemple, le nombre de jour de location de quelquechose, je ne veut pas qu'il entre "marjo")

                    D'ici là voici le code en question:
                    1. #include <iostream>
                    2. #include <string>
                    3. using namespace std;
                    4. int main ()
                    5. {
                    6.     string Nom,
                    7.            Rep,
                    8.            ModeleVehicule,
                    9.            VehiculePlusLoue;
                    10.     float  OdoDepart,
                    11.            OdoArrivee,
                    12.            Age,
                    13.            NbClient,
                    14.            NbJourLocation,
                    15.            NbVc = 0,
                    16.            NbVi = 0,
                    17.            NbVl = 0,
                    18.            AgeJeune = 0,
                    19.            AgeMoyen = 0,
                    20.            AgeMoyenne = 0,
                    21.            AgeVieux = 0,
                    22.            TotalRevenu = 0,
                    23.            AgeTotal = 0,
                    24.            Km,
                    25.            KmEx,
                    26.            CKE,
                    27.            Cout;
                    28.         cout << "                LOCATION DE VEHICULE" ;
                    29.         cout << "\n-------------------------------------------------------" ;
                    30.         cout << "\nEntrez le nom du client: " ;
                    31.         cin >> Nom;
                    32.         while (Nom != "Fini")
                    33.               {
                    34.               NbClient = NbClient + 1;
                    35.               cout << "\nEntrez l'age du client: " ;
                    36.               cin >> Age;
                    37.               if (Age < 26)
                    38.                  AgeJeune = AgeJeune + 1;
                    39.                  else
                    40.                      if (36 > Age > 25)
                    41.                         AgeMoyen = AgeMoyen + 1;
                    42.                         else
                    43.                             if (Age > 35)
                    44.                                AgeVieux = AgeVieux + 1;
                    45.               AgeTotal = AgeTotal + Age;
                    46.               cout << "\n[Compact = (C)]" ;
                    47.               cout << "\n[Intermediaire = (I)]" ;
                    48.               cout << "\n[De luxe = (L)]" ;
                    49.               cout << "\nEntrez le modele de vehicule: " ;
                    50.               cin >> ModeleVehicule;
                    51.               if (ModeleVehicule == "C")
                    52.                  NbVc = NbVc + 1;
                    53.               if (ModeleVehicule == "I")
                    54.                  NbVi = NbVi + 1;
                    55.               if (ModeleVehicule == "L")
                    56.                  NbVl = NbVl + 1;
                    57.               cout << "\nEntrez l'odometre au depart: " ;
                    58.               cin >> OdoDepart;
                    59.               cout << "\nEntrez l'odometre a l'arrivee: " ;
                    60.               cin >> OdoArrivee;
                    61.               Km = OdoArrivee - OdoDepart;
                    62.               if  (Km > 500)
                    63.                   {
                    64.                    KmEx = Km - 500;
                    65.                    if (KmEx < 501)
                    66.                       CKE = 0.10;
                    67.                    if (500 < KmEx < 1001)
                    68.                       CKE = 0.08;
                    69.                    if (KmEx > 1000)
                    70.                       CKE = 0.05;
                    71.                       }
                    72.               cout << "\nEntrez la duree de la location: " ;
                    73.               cin >> NbJourLocation;
                    74.               if (ModeleVehicule == "C")
                    75.                  Cout = NbJourLocation * 50;
                    76.               if (ModeleVehicule == "I")
                    77.                  Cout = NbJourLocation * 75;
                    78.               if (ModeleVehicule == "L")
                    79.                  Cout = NbJourLocation * 100;
                    80.               Cout = Cout + (KmEx * CKE);
                    81.               if (Age < 26)
                    82.                  Cout = Cout * 1.10;
                    83.               if (Age > 35)
                    84.                  Cout = Cout * 1.03;
                    85.               if (25 < Age < 36)
                    86.                  Cout = Cout * 1.06;
                    87.               cout << "\n\n\n\n                FACTURE CLIENT" ;
                    88.               cout << "\n-------------------------------------------------------" ;
                    89.               cout << "\nNom du client: " << Nom ;
                    90.               cout << "\nAge du client: " << Age ;
                    91.               cout << "\nModele du vehicule: " ;
                    92.               if (ModeleVehicule == "C")
                    93.                  cout << " Compact" ;
                    94.               if (ModeleVehicule == "I")
                    95.                  cout << " Intermediaire" ;
                    96.               if (ModeleVehicule == "L")
                    97.                  cout << " De luxe" ;
                    98.               cout << "\nNombre de km parcouru: " << Km ;
                    99.               cout << "\nCout de location: " << Cout << "$" ;
                    100.               TotalRevenu = TotalRevenu + Cout;
                    101.               cout << "\nEntrez le nom du client (Fini pour terminer): " ;
                    102.               cin >> Nom;
                    103.               }
                    104.         AgeMoyenne = AgeTotal / NbClient;
                    105.         if (NbVc > NbVi)
                    106.            if (NbVc < NbVl)
                    107.               VehiculePlusLoue = "le modele Compacte.";
                    108.         if (NbVi > NbVc)
                    109.            if (NbVi < NbVl)
                    110.               VehiculePlusLoue = "le modele Intermediaire.";
                    111.         if (NbVl > NbVc)
                    112.            if (NbVl > NbVi)
                    113.               VehiculePlusLoue = "le modele de Luxe.";
                    114.         cout << "\n\n\n\n                BILAN DE LOCATION" ;
                    115.         cout << "\n-------------------------------------------------------" ;
                    116.         cout << "\nNombre de Compacte louee: " << NbVc ;
                    117.         cout << "\nNombre d'Intermediaire louee: " << NbVi ;
                    118.         cout << "\nNombre de Luxueuse louee: " << NbVl ;
                    119.         cout << "\nNombre de clients entre 16-25 ans: " << AgeJeune ;
                    120.         cout << "\nNombre de clients entre 26-35 ans: " << AgeMoyen ;
                    121.         cout << "\nNombre de clients de plus de 35 ans: " << AgeVieux ;
                    122.         cout << "\nTotal des revenus: " << TotalRevenu << "$" ;
                    123.         cout << "\nAge moyen des clients: " << AgeMoyenne ;
                    124.         cout << "\nLe type de vehicule le plus loue est " << VehiculePlusLoue ;
                    125.         cout << "\nFaites 0 puis appuyez sur Enter pour Quitter" ;
                    126.         cin >> Rep;
                    127. }
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Entrée sélective de variable

                    × 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