-
08/06/2005 - 21h30 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
-
09/06/2005 - 09h38 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++.
-
09/06/2005 - 17h24 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
-
09/06/2005 - 19h18 jepoirrier
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');
} -
09/06/2005 - 19h52 g_h
Re : [C++] Comment se débarrasser des retours chariots ?
 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 à 19h54.
-
09/06/2005 - 21h30 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
-
09/06/2005 - 21h42 g_h
Re : [C++] Comment se débarrasser des retours chariots ?
 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++)
-
14/06/2005 - 22h41 Bleyblue
Re : [C++] Comment se débarrasser des retours chariots ?
Je comprend, merci beaucoup pour ton aide (et timeout et jepoirrier aussi)
| | |