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

SL & STL C++ Discussion :

probleme avec cin.ignore()


Sujet :

SL & STL C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 80
    Points : 63
    Points
    63
    Par défaut probleme avec cin.ignore()
    J'ai trouver sur les site un code pour ignorer cin.getline() qui est le suivant cin.ignore(cin.rdbuf()->in_avail()); et il ne marche pas.
    j'ai essayer de chercher des info sur cin.rdbuf() et in_avail() mais cela ne donne rien, pouvez-vous m'aider ?

    merci

  2. #2
    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
    J'ai pas compris ce que tu voulais faire. Mais en général on utilise cin.ignore de cette manière (pour vider le buffer d'entrée par exemple) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cin.ignore(numeric_limits<int>::max(), '\n');

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 80
    Points : 63
    Points
    63
    Par défaut
    j'ai essayer le code mais je ne doit pas avoir mis en include les bonnes libréries car il me met des erreurs quelles sont-elle?

  4. #4
    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
    Avec un peu de recherche on trouve toujours facilement quoi inclure.
    Là c'est <iostream> et <limits>.

    Et tu n'as toujours pas dit ce qu'était censé faire ton bout de code.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 80
    Points : 63
    Points
    63
    Par défaut
    je fait un comparateur de codage en binaire avec les code ASCII 5bits huffman 5 bits et le code genetique 5 bit. le 5 bit etant pour designer les 32 caractère codés
    voila je te met les source après.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 80
    Points : 63
    Points
    63
    Par défaut
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    #include<iostream.h>
    #include<stdlib.h>
    #include<stdio.h>
    #include<windows.h>
    #include<ctype.h>
    int attribution ( char tableau[] , int ptabl, char bit[])
    {
            int x =0 ;
            for (x=0;bit[x]!='\0';x++ )
            {
            if ((bit[x]!='0')&&(bit[x]!='1'))
            {
            cout<<"erreur dans la chaine de bit"<<endl;
            getchar();
            exit(0);
            }
            tableau[ptabl] = bit[x];
            ptabl++;
            }
            tableau[ptabl] = ' ';
            ptabl++;
            return ptabl ;
    }
    int main()
    {     for(;;){
          system("cls");
          cout<<"\tComparaison entre Huffman 32 et ASCII 5 bits\n\n";
          const int max = 20000;
          char bascii[10000]={'\0'};
          char bhuf[10000]={'\0'};
          char bgene[10000]={'\0'};
          int p, phuf = -1 , pascii = -1 , pgene = -1 ;
          pgene = attribution(bgene,pgene,"1");
          char texte[max];
          int count=0 , bits=0 , ascii  , debug=0 ;
          char choix;
          float gain=0;
          cout<<"Entrez une phrase pour connaitre lequels des codes est le plus avantageux"<<endl;
         cin.ignore(cin.rdbuf()->in_avail());
          cin.getline(texte, max, '\n');
          for (int x=0;texte[x]!='\0';x++)
          {
          texte[x]=tolower(texte[x]) ;
          }
          boucle:
          debug=0;
     
          while (texte[count] == 'a')
          {
          count++;
          debug++;
          //cout<<"1100";
          phuf = attribution(bhuf,phuf,"0100");
          pgene = attribution(bgene,pgene,"011001");
          pascii = attribution(bascii,pascii,"00001");
          }
     
          if (texte[count] == '\0')
          {debug=0;
          goto end;}
          if (debug == 0)
          {count++;}
          goto boucle  ;
          end:
          int bitascii =pascii+1-count;
          int bitgene =pgene+1-count-count;
          int bithuf =phuf+1-count;
     
          cout<<"\nCette chaine contient "<<count<<" de caracteres"<<endl;
     
          if ((bitascii<bithuf) && (bitascii<bitgene))
          {
          cout<<"Cette chaine est plus avantageuse a coder en ascii"<<endl;
          cout<<"La chaine prend "<<(bithuf-bitascii)*100/bitascii<<"% de moins par raport a huffman soi "<<(bithuf-bitascii)<<" bits"<<endl;
          cout<<"La chaine prend "<<(bitgene-bitascii)*100/bitascii<<"% de moins par raport au code genetique soi "<<(bitgene-bitascii)<<" bits"<<endl;
          }
          if ((bithuf<bitascii) && (bithuf<bitgene))
          {
          cout<<"Cette chaine est plus avantageuse a coder en Huffman"<<endl;
          cout<<"La chaine prend "<<(bitascii-bithuf)*100/bithuf<<"% de moins par raport a ascii soi "<<(bitascii-bithuf)<<" bits"<<endl;
          cout<<"La chaine prend "<<(bitgene-bithuf)*100/bithuf<<"% de moins par raport au code genetique soi "<<(bitgene-bithuf)<<" bits"<<endl;
          }
          if ((bitgene<bithuf) && (bitgene<bitascii))
          {
          cout<<"Cette chaine est plus avantageuse a coder avec le codage genetique"<<endl;
          cout<<"La chaine prend "<<(bitascii-bitgene)*100/bitgene<<"% de moins par raport a ascii soi "<<(bitascii-bitgene)<<" bits"<<endl;
          cout<<"La chaine prend "<<(bithuf-bitgene)*100/bitgene<<"% de moins par raport a huffman soi "<<(bithuf-bitgene)<<" bits"<<endl;
          }
          choix:
          cout<<"\n\nQue voulez-vous faire :\n\t1 - Recommencer\n\t2 - Voire les chaine de bits\n\t3 - Quitter\n";
          cin>>choix;
     
          if (!isdigit(choix))
          {
          system ("cls");
          goto choix;
          }
          switch (choix)
          {    case '1' :
               //cin.ignore(cin.rdbuf()->in_avail());
                         break;
     
               case '2' :
               cout<<"\nVoici la phrase coder en Huffman, elle comporte "<<bithuf<<" bits"<<endl;
               for (int x=-1;x<phuf;x++)
               {
               cout<<bhuf[x];
               }
               cout<<"\nVoici la phrase avec le codage genetique, elle comporte "<<bitgene<<" bits"<<endl;
               for (int x=-1;x<pgene;x++)
               {
               cout<<bgene[x];
               }
               cout<<"\nVoici la phrase coder en Ascii, elle comporte "<<bitascii<<" bits"<<endl;
               for (int x=-1;x<pascii;x++)
               {
               cout<<bascii[x];
               }
               goto choix;
                         break;
               case '3' :  return 0;
                         break;
               default : goto choix;
          }
          }
          }

    et quand je fait recommencer ca plante, le cin.ignore ne fonctione pas.


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

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 80
    Points : 63
    Points
    63
    Par défaut
    donne moi tout le code complet de cin.ignore(numeric_limits<int>::max(), '\n');

  8. #8
    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
    Citation Envoyé par Stany
    donne moi tout le code complet de cin.ignore(numeric_limits<int>::max(), '\n');
    Donne moi 100 balles 8)

    Ton code est bien trop long, enlève tout le code sans rapport avec le problème et surtout dis nous ce qu'est censé faire le cin.ignore dans ton programme (vider le buffer d'entrée ?).

  9. #9
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Et même pour résoudre le problème complet, le code est bien trop long... J'avais vu il n'y a pas longtemps un code de ce type, que j'avais réécrit :

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    map<char, string> tableDeCompression;
     
    void initHuffmann()
    {
    	// Remarque : J'ai des doutes sur certaines valeurs de cette table
    	// Je pense qu'elle n'est pas optimisée...
    	tableDeCompression['e'] = "011";
    	tableDeCompression['a'] = "1011";
    	tableDeCompression['i'] = "0100";
    	tableDeCompression['n'] = "1001";
    	tableDeCompression['o'] = "1101";
    	tableDeCompression['u'] = "1110";
    	tableDeCompression['t'] = "0011";
    	tableDeCompression['l'] = "1111";
    	tableDeCompression['r'] = "1100";
    	tableDeCompression['p'] = "10101";
    	tableDeCompression['c'] = "10001";
    	tableDeCompression['d'] = "10000";
    	tableDeCompression['m'] = "001010";
    	tableDeCompression['v'] = "0010010"; // Euh, bug, là, non ?
    	tableDeCompression['f'] = "0010010"; // D'où l'intérê d'écrire comme çà... ;)
    	tableDeCompression['q'] = "0010110";
    	tableDeCompression['h'] = "1010000";
    	tableDeCompression['g'] = "1010001";
    	tableDeCompression['y'] = "001011101";
    	tableDeCompression['x'] = "1010011";
    	tableDeCompression['b'] = "1010010";
    	tableDeCompression['j'] = "001011100";
    	tableDeCompression['k'] = "0010111100";
    	tableDeCompression['w'] = "0010111101";
    	tableDeCompression['z'] = "001011111";
    	tableDeCompression[' '] = "000";
    	tableDeCompression['.'] = "001000000";
    	tableDeCompression[','] = "001000101";
    	tableDeCompression['-'] = "0010001001";
    	tableDeCompression['?'] = "0010000101";
    	tableDeCompression['\''] = "0010000100";
    }
     
    string huffmann(string const &texteEnClair)
    {
    	string result;
    	for (size_t i = 0 ; i<texteEnClair.size() ; ++i)
    	{
    		result += tableDeCompression[tolower(texteEnClair[i])];
    	}
    	return result;
    }
    Il doit y avoir moyen de faire aussi ce genre de chose dans ton cas.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 80
    Points : 63
    Points
    63
    Par défaut
    oui je sai c un pot a moi qui l'as fait on bosse ensmenble

    comme tu dit loulou24 je veux vider le buffer d'entrée

    En realiter je vai a paris avec mon lycée pour presenter nos recherches et je voudrai qu'il marche mon programme mais c pas si grave ils marchent parciellement
    dsl JolyLoic mais je vairai ton codage plus tard quand j'aurai le temp

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 80
    Points : 63
    Points
    63
    Par défaut
    JolyLoic pourai-tu l'expliquer un peu de ton code car je ne comprend pas tout.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 25
    Points : 18
    Points
    18
    Par défaut
    Voici un truc que j'ai codé et qui m'a aidé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // flush() : Vide le buffer de saisie
    inline void flush()
    {
    	// Remettre le buffer à zero
    	cin.clear();
    	// Clear ne marchera pas seul:
    	// Ignorer tous les caractères du buffer 
    	// jusqu'au caractère 'Nouvelle ligne' compris
    	cin.ignore(INT_MAX, '\n');
    }
    Voilllllaaa ! Ca ça marche très bien pour vider le cin


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

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 80
    Points : 63
    Points
    63
    Par défaut
    moi aussi j'aime bien bidouiller des truc dans le genre.
    Allez ca marche a la perfection je t'ador, thanks to you djar very much!!

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 80
    Points : 63
    Points
    63
    Par défaut
    Pouvez vous m'expliquer comme utiliser

    map<char, string> tableDeCompression;

    et le type

    string

    merci

  15. #15
    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
    Tu as la FAQ pour les string et Google pour les map. Tu as également des liens vers les meilleures documentations de référence dans la FAQ.

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 80
    Points : 63
    Points
    63
    Par défaut
    merci j'ai trouver dans les STL je pense pourvoir me debroullier

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 80
    Points : 63
    Points
    63
    Par défaut
    Citation Envoyé par JolyLoic
    Et même pour résoudre le problème complet, le code est bien trop long... J'avais vu il n'y a pas longtemps un code de ce type, que j'avais réécrit :

    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
    map<char, string> tableDeCompression;
     
    void initHuffmann()
    {
    	// Remarque : J'ai des doutes sur certaines valeurs de cette table
    	// Je pense qu'elle n'est pas optimisée...
    	tableDeCompression['e'] = "011";
    	tableDeCompression['a'] = "1011";
    	tableDeCompression['i'] = "0100";
                    [ je coup un peu ]
    }
     
    string huffmann(string const &texteEnClair)
    {
    	string result;
    	for (size_t i = 0 ; i<texteEnClair.size() ; ++i)
    	{
    		result += tableDeCompression[tolower(texteEnClair[i])];
    	}
    	return result;
    }
    j'ai essayé et au bout de quelque recherche je me pause la question comment fait tu pour mettre les valeurs ou pour les recupérer ou les pointer moi j'ai mis tout les valeurs des table dans "string huffmann" et ca marche.

    Aurait-il un moyen que de les ajouter

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 80
    Points : 63
    Points
    63
    Par défaut
    Ca y est j'ai trouver comment le fair marcher
    il faut juste mettre le void inithuffmann dans le string huffman
    en ajoutan juste cela
    -> inithuffmann();
    Citation Envoyé par JolyLoic
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    map<char, string> tableDeCompression;
     
    void initHuffmann()
    {
    	// Remarque : J'ai des doutes sur certaines valeurs de cette table
    	// Je pense qu'elle n'est pas optimisée...
    	tableDeCompression['e'] = "011";
    	tableDeCompression['a'] = "1011";
    	tableDeCompression['i'] = "0100";
    	tableDeCompression['n'] = "1001";
    	tableDeCompression['o'] = "1101";
    	tableDeCompression['u'] = "1110";
    	tableDeCompression['t'] = "0011";
    	tableDeCompression['l'] = "1111";
    	tableDeCompression['r'] = "1100";
    	tableDeCompression['p'] = "10101";
    	tableDeCompression['c'] = "10001";
    	tableDeCompression['d'] = "10000";
    	tableDeCompression['m'] = "001010";
    	tableDeCompression['v'] = "0010010"; // Euh, bug, là, non ?
    	tableDeCompression['f'] = "0010010"; // D'où l'intérê d'écrire comme çà... ;)
    	tableDeCompression['q'] = "0010110";
    	tableDeCompression['h'] = "1010000";
    	tableDeCompression['g'] = "1010001";
    	tableDeCompression['y'] = "001011101";
    	tableDeCompression['x'] = "1010011";
    	tableDeCompression['b'] = "1010010";
    	tableDeCompression['j'] = "001011100";
    	tableDeCompression['k'] = "0010111100";
    	tableDeCompression['w'] = "0010111101";
    	tableDeCompression['z'] = "001011111";
    	tableDeCompression[' '] = "000";
    	tableDeCompression['.'] = "001000000";
    	tableDeCompression[','] = "001000101";
    	tableDeCompression['-'] = "0010001001";
    	tableDeCompression['?'] = "0010000101";
    	tableDeCompression['\''] = "0010000100";
    }
     
    string huffmann(string const &texteEnClair)
    {
    	initHuffmann();  // là
                    string result;
    	for (size_t i = 0 ; i<texteEnClair.size() ; ++i)
    	{
    		result += tableDeCompression[tolower(texteEnClair[i])];
    	}
    	return result;
    }

Discussions similaires

  1. probleme avec cin et wstring
    Par sorari dans le forum SL & STL
    Réponses: 11
    Dernier message: 08/04/2005, 10h33
  2. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

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