Códigos

Cuando nos encontramos realizando un programa básico en C++ que hace uso de la consola como medio para poder mostrar y obtener información, uno de los métodos más usados para poder recabar esta información son cin y getline.

Pero desafortunadamente, estos métodos al momento de usarlos de manera conjunta para recolectar información presentan una serie de problemas, el más común es que se si existe un getline después de un cin, este no funcionará, se omitirá por lo tanto no se podrá recolectar esta información.

Ejemplo:

#include <iostream>

using namespace std;

int main(){
    string m;
    char i;
    cout<<"Ingrese un caracter: ";
    cin>>i;
    cout<<"El caracter que ingreso fue: "<<i<<endl;
    cout<<"Ingrese una oracion: ";
    getline(cin,m);
    cout<<"La oracion que ingreso fue: "<<m<<endl;
}

A primera vista podríamos pensar que hemos oprimido más de una vez la tecla Enter después de haber seleccionado un carácter, pero no es así. Para nuestra fortuna este error es fácil de solucionar, ya que lo único que tenemos que hacer es agregar dos líneas más de código, las cuales permitirán que este error deje de suceder las cuales son:

cin.clear();
cin.ignore( INT_MAX, '\n' );

Si lo consideras pertinente, podrías crear una función global que invoques cada vez que uses la sentencia cin, la función global propuesta seria:

void clearCin(){
	cin.clear();
	cin.clear();
}

Regresando con el ejemplo iniciar, y después de hacer las correcciones pertinentes quedaría de la siguiente forma:

#include <iostream>

using namespace std;

void clearCin(){
    cin.clear();
    cin.ignore( INT_MAX, '\n' );
}

int main(){
    string m;
    char i;
    cout<<"Ingrese un caracter: ";
    cin>>i;
    clearCin();
    cout<<"El caracter que ingreso fue: "<<i<<endl;
    cout<<"Ingrese una oracion: ";
    getline(cin,m);
    cout<<"La oracion que ingreso fue: "<<m<<endl;
}

De esta forma, logramos resolver este pequeño error que a más de uno sufrió cuando apenas empezábamos a conocer el lenguaje este maravilloso lenguaje de programación llamado C++.