Comment attendre la saisie de l'utilisateur en C++
-
Utilisez la méthode
cin.get()
pour attendre l’entrée de l’utilisateur -
Utiliser la fonction
getchar
pour attendre l’entrée de l’utilisateur -
Utilisez la fonction
getc
pour attendre l’entrée de l’utilisateur -
Évitez d’utiliser
system("pause")
pour attendre l’entrée de l’utilisateur
Cet article présentera les méthodes C++ permettant d’attendre les entrées de l’utilisateur. Notez que le tutoriel suivant suppose que le contenu des entrées de l’utilisateur n’est pas pertinent pour l’exécution du programme.
Utilisez la méthode cin.get()
pour attendre l’entrée de l’utilisateur
La fonction membre get()
est std:cin
, qui fonctionne presque comme un opérateur d’entrée >>
qui extrait le(s) caractère(s) du flux. Dans ce cas, lorsque nous ne sommes pas intéressés par le traitement de l’entrée de l’utilisateur et que nous devons seulement implémenter la fonctionnalité wait
, nous pouvons appeler la fonction get
sans aucun argument. Notez, cependant, que cette fonction revient lorsque la touche Enter est pressée.
#include <iostream>
#include <vector>
using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::vector;
int main() {
vector<char> arr = {'w', 'x', 'y', 'z'};
int flag;
flag = cin.get();
for (auto const& value : arr) cout << value << "; ";
cout << "\nDone !" << endl;
return EXIT_SUCCESS;
}
Production:
w; x; y; z;
Done !
Utiliser la fonction getchar
pour attendre l’entrée de l’utilisateur
La fonction getchar
est la fonction de bibliothèque standard en C permettant de lire un seul caractère du flux d’entrée (stdin
). Comme la précédente, cette méthode attend le retour d’un nouveau caractère de ligne (c’est-à-dire l’appui sur la touche Enter). Le caractère getchar
retourne eof
en cas d’erreur ou lorsque la fin du flux est rencontrée.
#include <iostream>
#include <vector>
using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::vector;
int main() {
vector<char> arr = {'w', 'x', 'y', 'z'};
int flag;
flag = getchar();
for (auto const& value : arr) cout << value << "; ";
cout << "\nDone !" << endl;
return EXIT_SUCCESS;
}
Utilisez la fonction getc
pour attendre l’entrée de l’utilisateur
Comme alternative, nous pourrions remplacer l’exemple ci-dessus par la fonction getc
. On passe à getc
l’argument FILE *stream
pour lire à partir d’un flux d’entrée donné, mais dans ce cas, on passe à stdin
, qui est le flux d’entrée standard communément associé à l’entrée du terminal. Cette fonction revient également lorsque la touche Enter est appuyée.
#include <iostream>
#include <vector>
using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::vector;
int main() {
vector<char> arr = {'w', 'x', 'y', 'z'};
int flag;
flag = getchar();
for (auto const& value : arr) cout << value << "; ";
cout << "\nDone !" << endl;
return EXIT_SUCCESS;
}
Évitez d’utiliser system("pause")
pour attendre l’entrée de l’utilisateur
La fonction system
est utilisée pour exécuter des commandes shell et le nom de la commande est passé sous forme de chaîne de caractères littérale. Ainsi, si une pause
est passée en argument, elle tente d’exécuter la commande correspondante, qui n’est disponible que sur les plates-formes Windows. Il est préférable d’implémenter une fonction d’attente personnalisée avec les méthodes énumérées ci-dessus que d’utiliser une méthode non portable de system("pause")
.
#include <iostream>
#include <vector>
using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::vector;
int main() {
vector<char> arr = {'w', 'x', 'y', 'z'};
int flag;
system("pause");
for (auto const& value : arr) cout << value << "; ";
cout << "\nDone !" << endl;
return EXIT_SUCCESS;
}
Production:
sh: 1: pause: not found
w; x; y; z;
Done !
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook