Vider le buffer de cin pour reutilisation

saturne_1606 Messages postés 29 Date d'inscription mardi 23 mars 2004 Statut Membre Dernière intervention 23 juin 2006 - 13 mai 2004 à 22:52
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013 - 14 mai 2004 à 10:23
Bonjour a tous!
Malgré mes recherches sur le forum, je n'est pas trouver reponse a mon probleme.
Bon voila, j'ai surdéfini l'operateur >> pour une classe entreprise comme suit:
istream& operator >>(istream& in, entreprise& e)
{
    char c='\0';
    string name, adress, fix, site, act, num_fax;
    bool ok=true;
    in >> c;
    if (c!='(') ok=false;
    else
    {
        in >> name>>c;
        if (c!=';') ok=false;
        else
        {
            in >> adress>>c;
            if (c!=';') ok=false;
            else
            {
                in >> fix>>c;
                if (c!=';') ok=false;
                else
                {
                    in >> site>>c;
                    if (c!=';') ok=false;
                    else
                    {
                        in >> act>>c;
                        if (c!=';') ok=false;
                        else
                        {
                            in >> num_fax>>c;
                            if (c!=')') ok=false;
                        }
                    }
                }
            }
        }
    }
    if (ok)
    {
        e.nom=name; e.adresse=adress; e.num_tel_fixe=fix; e.www=site; e.activite=act; e.fax=num_fax;
    }
    else in.clear(ios::badbit | in.rdstate());
    return in;
}

puis dans voila une fonction qui utilise celle de dessus:
void carnet::operator ++(int inutil)
{
    int ch;
    do
    {
        cout << "Vous pouvez:"<<endl
             << "\t0) Revenir au menu principal"<<endl
             << "\t1) Ajouter une fiche Entreprise"<<endl
             << "\t2) Ajouter une fiche Ami"<<endl
             << "\t3) Ajouter une fiche Famille"<<endl
             << "\t4) Ajouter une fiche Boulot"<<endl;
        do
        {   
            system("PAUSE");//Ajout pour debugger
            ch = choix_menu();
            if (cin.bad()) cout <<"cin bad"<<endl;//Ajout pour debugger
        }while((ch<0)||(ch>4));
        switch (ch)
        {
            case 0: // retour au menu précédent
                return;
            case 1: //ajout entreprise
                elem_entreprise.push_front();
                cout << "Format: ( Nom ; Adresse ; N fixe ; Site ; Activite ; N fax )"<<endl;
                //cin >> *(elem_entreprise.begin());
                if (!(cin >> *(elem_entreprise.begin())))
                {
                    elem_entreprise.erase(elem_entreprise.begin());
                    while(cin.get()!='\n') {} //essai pour vider le buffer de cin
                }
                else elem_entreprise.sort();
                break;
            case 2: //modif ami
                elem_ami.push_front();
                cout << "Format: ( Nom ; Adresse ; N fixe ; Site ; N portable ; Email ; Naissance )"<<endl;
                cin >> *(elem_ami.begin());
                elem_ami.sort();
                break;
            case 3: //modif famille
                elem_famille.push_front();
                cout << "Format: ( Nom ; Adresse ; N fixe ; Site ; N portable ; Email ; Naissance )"<<endl;
                cin >> *(elem_famille.begin());
                elem_famille.sort();
                break;
            case 4: //modif boulot
                elem_boulot.push_front();
                cout << "Format: ( Nom ; Adresse ; N fixe ; Site ; N portable ; Email ; Fonction )"<<endl;
                cin >> *(elem_boulot.begin());
                elem_boulot.sort();
        }
    }while(ch!=0);
}

Mais voila, lors de mon "essai" pour vider le buffer de cin, la fonction ne s'arrete pas.
Je vois pas le probleme.
Merci gracieusement pour votre future aide.
A voir également:

8 réponses

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
13 mai 2004 à 23:30
essay
cin.clear();
cin.ignore('\n');
0
Rejoignez-nous