Use la función ignore() en C++

Jinku Hu 12 octubre 2023
  1. Usar la función ignore() para descartar la entrada del usuario de la línea de comandos no deseada
  2. Use la función ignore para extraer las iniciales de la entrada del usuario en C++
Use la función ignore() en C++

Este artículo explicará varios métodos de cómo usar la función ignore() en C++.

Usar la función ignore() para descartar la entrada del usuario de la línea de comandos no deseada

La función ignore() es una función miembro de std::basic_istream y es heredada por diferentes clases de flujo de entrada. La función descarta los caracteres del flujo hasta el delimitador dado, inclusive, y luego extrae el resto del flujo.

ignore toma dos argumentos; el primero es el número de caracteres a extraer, y el segundo es el carácter delimitador.

El siguiente ejemplo muestra cómo se llama a la función ignore en el objeto cin para almacenar sólo 3 números y descartar cualquier otra entrada del usuario. Nótese que usamos numeric_limits<std::streamsize>::max() como primer argumento de la función ignore para forzar el caso especial y desactivar el parámetro del número de caracteres.

#include <fstream>
#include <iostream>
#include <limits>
#include <sstream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::istringstream;
using std::numeric_limits;
using std::string;

int main() {
  while (true) {
    int i1, i2, i3;
    cout << "Type space separated numbers: " << endl;
    cin >> i1 >> i2 >> i3;
    if (i1 == 0) exit(EXIT_SUCCESS);
    cin.ignore(numeric_limits<std::streamsize>::max(), '\n');
    cout << i1 << "; " << i2 << "; " << i3 << endl;
  }
  return EXIT_SUCCESS;
}

Resultado:

Type space separated numbers:
238 389 090 2232 89
238; 389; 90

Use la función ignore para extraer las iniciales de la entrada del usuario en C++

Una forma común de usar la función ignore es buscar el flujo de entrada al delimitador deseado y extraer sólo los caracteres necesarios.

En el siguiente ejemplo de código, la entrada del usuario es analizada de manera que sólo se extraen las iniciales de las cadenas separadas por el espacio. Note que estamos usando cin.get dos veces para extraer un solo carácter del flujo, pero la declaración cin.ignore entre ellas asegura que cada carácter antes y después del espacio siguiente sea descartado.

#include <fstream>
#include <iostream>
#include <limits>
#include <sstream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::numeric_limits;
using std::string;
using std::vector;

int main() {
  char name, surname;
  cout << "Type your name and surname: " << endl;
  name = cin.get();
  cin.ignore(numeric_limits<std::streamsize>::max(), ' ');
  surname = cin.get();

  cout << "Your initials are: " << name << surname << endl;

  return EXIT_SUCCESS;
}

Resultado:

Type your name and surname:
Tim Cook
Your initials are: TM
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

Artículo relacionado - C++ IO