IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

comment stopper la saisie dans une boucle while


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 55
    Points : 42
    Points
    42
    Par défaut comment stopper la saisie dans une boucle while
    Bonjour et merci pour votre aide

    Dnas le code suivant comment interrompre la saisie dans la boucle while?

    Le but est de saisir un nombre de paires du style aa bb dd ee aa .

    Celle-ci sont réceptionnées dans un string.
    Si je veux arrêter la saisie par la touche entrée est-ce possible?

    Sinon, comment faire?

    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
    31
    32
    33
    34
    35
    36
    37
    38
    #include <cstdlib>
    #include <iostream>
    #include <vector>
     
    using namespace std;
     
    struct Pair { string pairs; double num;};
    vector<Pair> p1;  
    vector<Pair> p7;
     
    double& f(const string &s)
    {
       for (int j = 0 ; j < p1.size(); j++)
          if (s==p1[j].pairs) 
           return p1[j].num;  
     
          Pair p2;
          p2.pairs = s;
          p2.num = 0;
          p1.push_back(p2);
          return p1[p1.size()-1].num;
    } 
     
    } 
    int main()
    {
        string s;
     
        cout << "Veuillez saisir un ensemble de paires de lettres\n";
        while (getline(cin,s,'\n')) f(s)++;
        cout << "Voici le nombre de paires différentes saisies\n";
        for ( vector <Pair>::const_iterator p = p1.begin(); p != p1.end();
                                p++)
               cout << p->pairs << ":" << p->num << '\n';                    
     
        system("PAUSE");
        return 0;
    }

  2. #2
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Plusieurs façons de faire:
    - ^D (sous *nix) ou ^Z (sous dos et descendants) ferme définitivement le flux entrant => plus aucune interaction possible avec l'utilisateur
    - tu reconnais une valeur particulière qui sert à signifier que tu as fini de saisir
    - tu sais (d'une façon ou d'une autre) combien d'éléments tu vas saisir.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 55
    Points : 42
    Points
    42
    Par défaut
    Bon alors ^Z, ça marche nickel.
    Par contre quand je veux enchaîner deux saisies j'ai un léger pb
    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
    int main()
    {
        string s;
        string t;
     
        cout << "Veuillez saisir un ensemble de paires de lettres\n";
        while (cin >> s) f(s)++;
        cout << "Voici le nombre de paires différentes saisies\n";
        for ( vector <Pair>::const_iterator p = p1.begin(); p != p1.end();
                                p++)
               cout << p->pairs << ":" << p->num << '\n';                    
     
        cout << "Veuillez saisir un string\n";
        cin >> t;
        h(t);
    Si je travaille avec le mêm string s, il garde en mémoire la saisie précédente.
    Si je travaille avec deux string s et t ( ci-dessus) il be me laisse pas la possibilité de saisir!!!

    ALors je fais comment moi?
    Merci...


    [Balises CODE rajoutées par Loulou24, merci d'y penser à l'avenir]

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2003
    Messages : 65
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par smag
    Bon alors ^Z, ça marche nickel.
    Ça ne marche pas du tout si tu veux poursuivre la discussion avec l'usager. Demande plutôt de taper une ligne vide pour terminer la saisie par exemple. Si la ligne saisie est vide, alors tu sors de la boucle.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 55
    Points : 42
    Points
    42
    Par défaut
    ok j'ai fini par tester sur le mot Quit
    Merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while (cin >> s) 
        {if (s == "Quit")
        break;
               f(s)++;}

    [Balises CODE rajoutées par Loulou24, merci d'y penser à l'avenir]

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut


    Merci de penser aux balises CODE à l'avenir.

  7. #7
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    Citation Envoyé par smag
    ok j'ai fini par tester sur le mot Quit
    Merci
    while (cin >> s)
    {if (s == "Quit")
    break;
    f(s)++;}
    tu as essayé ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while ( (cin >> s) && (s!="Quit") )
       f(s)++;
    ou pour ne pas avoir à se soucier de la casse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <algorithm>
     
    while (cin >> s)
    {
       std::string tmp;
       std::transform(s.begin(),s.end(),tmp.begin(),tolower);
       if (tmp == "quit")
          break;
       f(s)++;
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sortir de la saisie dans une boucle while
    Par africanwinners dans le forum C
    Réponses: 4
    Dernier message: 08/08/2011, 17h41
  2. [Tkinter] Méthode get() dans une boucle while
    Par Thundie dans le forum Tkinter
    Réponses: 2
    Dernier message: 04/02/2006, 00h06
  3. Problème de SCANF dans une boucle WHILE
    Par FidoDido® dans le forum C
    Réponses: 4
    Dernier message: 30/12/2005, 17h42
  4. [Conception] Problème de test dans une boucle while
    Par Cyrius dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/11/2005, 18h07
  5. [MFC] Dialog dans une boucle while
    Par oxor3 dans le forum MFC
    Réponses: 5
    Dernier message: 23/04/2004, 22h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo