[C++] Comment se débarrasser des retours chariots ?
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

[C++] Comment se débarrasser des retours chariots ?



  1. #1
    Bleyblue

    [C++] Comment se débarrasser des retours chariots ?


    ------

    Bonjour,

    Voici un code tout bête :

    Code:
    #include <iostream>
    
    int main()
    {
        using namespace std;
        char a,b;
        
        cout >> "Entrez une valeur : "
        cin >> a;
        cout << "Appuyez sur une touche pour terminer ..."
        cin.get(b);
        return 0;
        
    }
    Et donc vous vous doutez bien que les lignes :

    cout << "Appuyez sur une touche pour terminer ..."
    cin.get(b);

    servent à créer une 'pause' dans le programme avant de le terminer. Poutant cela ne fonctionne pas. En effet, une fois que l'utilisateur a entrer une valeur (pour a) il entre aussi un RETOUR CHARIOT (en appuyant sur la touche enter) mais celui ci reste dans le buffer.
    Donc la ligne :

    cin.get(b);

    ne récupère que le retour chariot et donc pas de pause dans le programme. Vous avez une idée de comment m'en débarasser ? J'ai essayé avec flush() et endl() mais sans succes ...

    merci

    -----

  2. #2
    timeout

    Re : [C++] Comment se débarrasser des retours chariots ?

    cin.get(b) ne créé pas une pause mais attends l'entrée d'une touche au clavier et
    ensuite bufferise cette touche et quand tu tapes le retour chariot cin.get(b) retourne
    la touche que tu as tapés.

    Donc la méthode "get()" ne récupére pas le retour chariot mais retourne le caractére
    que tu as tapés lorsque tu fais un retour chariot.

    Si tu fais faire une pause remplace cin.get(b) par getch() lorsque tu appuieras sur une
    touche le programme quittera mais par contre getch() n'est pas standard en c++.
    Fly is like a dream.

  3. #3
    Bleyblue

    Re : [C++] Comment se débarrasser des retours chariots ?

    Ce n'est pas standard non. Sinon j'aurais tout simplement fait :
    Code:
    system("pause");
    getchar();
    comme en C.

    Il n'est pas possible d'avoir une méthode compatible avec le standard ANSI ?

    merci

  4. #4
    invite24357dd0

    Re : [C++] Comment se débarrasser des retours chariots ?

    Salut,
    En cherchant sur Google pour "C++ pause", j'ai trouvé cette page qui donnait cette fonction pause :
    Code:
    void pause()
    {
       std::cin.clear();
       std::cin.ignore(std::numeric_limits<std::streamsize>::max());
       std::cout << "Press Enter to continue . . .\n";
       std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }

  5. A voir en vidéo sur Futura
  6. #5
    g_h

    Re : [C++] Comment se débarrasser des retours chariots ?

    Citation Envoyé par timeout
    mais par contre getch() n'est pas standard en c++.
    Ni en C, ni en quoi que ce soit


    Sinon :

    Code HTML:
    #include <iostream>
    
    using namespace std;
    
    int main() {
    	char a,b;
    
    	cout << "Entrez une valeur : " <<endl;
    	cin >> a;
    	cin.ignore(numeric_limits<streamsize>::max(), '\n');
    	cout << "Appuyez sur une touche pour terminer ..." << endl;
    	cin.get(b);
    	return 0;
    }
    Mais il y a peut-être mieux, le C++ c'est pas ma spécialité...

    [edit : je suis bête, ça ressemble grandement au code de jepoirrier... par contre, cin.clear je ne sais pas à quoi ça sert]
    Dernière modification par g_h ; 09/06/2005 à 20h54.

  7. #6
    Bleyblue

    Re : [C++] Comment se débarrasser des retours chariots ?

    Ahhh c'est parfait

    Mais que signifie ce numeric_limits<streamsize>::ma x() ?
    Il n'y a qu'un seul caractère à ignorer donc à priori ce serait (et d'ailleur ça fonctionne bien comme ça) : cin.ignore(1,'\n') non ?

    merci

  8. #7
    g_h

    Re : [C++] Comment se débarrasser des retours chariots ?

    Citation Envoyé par Bleyblue
    Ahhh c'est parfait

    Mais que signifie ce numeric_limits<streamsize>::ma x() ?
    Il n'y a qu'un seul caractère à ignorer donc à priori ce serait (et d'ailleur ça fonctionne bien comme ça) : cin.ignore(1,'\n') non ?

    merci
    tape 2 caractères et appuie sur entrée, tu verras
    numeric_limits<streamsize>::ma x() en l'occurrence c'est la taille maximum de cin (le nombre d'octets qu'il peut bufferiser au maximum)

    cin.ignore(1,'\n') ça veut dire que tu zappes 1 caractère (c'est pareil que cin.ignore(1) et même cin.ignore() tout court, dans tous les cas ça ne zappera qu'un seul caractère)
    cin.ignore(x,'\n'), zappe x caractères, mais si il rencontres un '\n',il s''arrête
    cin.ignore(numeric_limits<stre amsize>::max(),'\n'), ça zappe tout (et ça s'arrête de zapper si il rencontre un '\n')

    tu me diras peut-être : pourquoi ne pas faire cin.ignore(numeric_limits<stre amsize>::max()) tout simplement ?
    ça dépend à quoi est raccordé cin, si c'est un fichier, tu ne t'arrêtes pas en fin de ligne, donc tu ignores tout, ce qui peut-être dommage... )
    (quoique c'est à vérifier, je ne connais pas bien le C++)

  9. #8
    Bleyblue

    Re : [C++] Comment se débarrasser des retours chariots ?

    Je comprend, merci beaucoup pour ton aide (et timeout et jepoirrier aussi)

Discussions similaires

  1. [Zoologie] Comment se débarrasser des lézards ?
    Par invite31884646 dans le forum Biologie
    Réponses: 26
    Dernier message: 20/06/2012, 12h58
  2. Au secours : comment puis je me débarrasser du virus TR/Dldr.agent.11776
    Par invite0f581d85 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 2
    Dernier message: 26/05/2007, 09h50
  3. Un spyware, comment m'en débarrasser ?
    Par roro123 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 23
    Dernier message: 21/11/2005, 09h42
  4. Comment fabriquer des retours de scène pas chers ?
    Par inviteffa9b486 dans le forum Électronique
    Réponses: 1
    Dernier message: 22/03/2005, 16h31
  5. subventionner des activités permettant de se débarrasser du CO2
    Par invite55ed523b dans le forum Environnement, développement durable et écologie
    Réponses: 4
    Dernier message: 09/09/2004, 10h22
Découvrez nos comparatifs produits sur l'informatique et les technologies.