Cómo esperar la entrada del usuario en C++

Jinku Hu 12 octubre 2023
  1. Use el cin.get() método para esperar la entrada del usuario
  2. Usa la función getchar para esperar la entrada del usuario
  3. Use la función getc para esperar la entrada del usuario
  4. Evite usar system("pause") para esperar la entrada del usuario
Cómo esperar la entrada del usuario en C++

Este artículo presentará los métodos de C++ para esperar la entrada del usuario. Tenga en cuenta que el siguiente tutorial asume que los contenidos de las entradas del usuario son irrelevantes para la ejecución del programa.

Use el cin.get() método para esperar la entrada del usuario

get() es la función de miembro std:cin, que funciona casi como un operador de entrada >> que extrae carácter(es) del flujo. En este caso, cuando no estamos interesados en procesar la entrada del usuario y sólo necesitamos implementar la funcionalidad wait, podemos llamar a la función get sin ningún argumento. Fíjate, sin embargo, que esta función vuelve cuando se pulsa la tecla Enter.

#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;
}

Resultado:

w; x; y; z;
Done !

Usa la función getchar para esperar la entrada del usuario

La función getchar es la función de biblioteca estándar de C para leer un solo carácter del flujo de entrada (stdin). Al igual que el anterior, este método espera que un nuevo carácter de línea (es decir, la tecla Enter que se presione) regrese. getchar devuelve of en caso de error o cuando se encuentra el final del flujo.

#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;
}

Use la función getc para esperar la entrada del usuario

Como alternativa, podríamos sustituir el ejemplo anterior por la función getc. A getc se le pasa el argumento FILE *stream para leer de cualquier flujo de entrada dado, pero en este caso, estamos pasando stdin, que es el flujo de entrada estándar comúnmente asociado con la entrada terminal. Esta función también regresa cuando se presiona la tecla Enter.

#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;
}

Evite usar system("pause") para esperar la entrada del usuario

La función system se usa para ejecutar comandos de shell y el nombre del comando se pasa como un literal de cadena. Así, si se pasa una pause como argumento, se intenta ejecutar el comando correspondiente, que sólo está disponible en plataformas Windows. Es mejor implementar una función de espera personalizada con los métodos listados anteriormente que usar una forma no 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 (en plataforma Linux):

sh: 1: pause: not found
w; x; y; z;
Done !
Autor: 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