Comment attendre la saisie de l'utilisateur en C++

Jinku Hu 12 octobre 2023
  1. Utilisez la méthode cin.get() pour attendre l’entrée de l’utilisateur
  2. Utiliser la fonction getchar pour attendre l’entrée de l’utilisateur
  3. Utilisez la fonction getc pour attendre l’entrée de l’utilisateur
  4. Évitez d’utiliser system("pause") pour attendre l’entrée de l’utilisateur
Comment attendre la saisie de l'utilisateur en C++

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 !
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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