Métodos de cin en C++
La clase cin en C++ permite guardar en una variable lo que el usuario ingrese desde el input estándar y tiene varios métodos para lograr la lectura y guardado.
El dato puede ser procesado para ser almacenado en los diferentes tipos que manejamos comúnmente, así como; int, float, char, string o bool.
Métodos mas utilizados de cin en C++
- cin.get()
- cin. Ignore()
- cin. getline()
cin.get()
Este método permite leer solo el primer caracter que ingresa el usuario cuando se le pide ingresar una palabra y después mostrarlo en pantalla.
en este método solo es necesario declarar una variable tipo char.
1 2 3 4 5 6 7 8 9 10 |
#include <iostream> // libreria que permite entrada y salida de caracteres using namespace std; // es para poder usar palabras reservadas int main () // cuerpo del programa { char letra; //declaracion de variables en este caso (tipo char) cout<<"anote una palabra cualquiera"<<endl; //muestra en pantalla lo que se preguntara letra=cin.get(); //como se utiliza cin.get cout<<"tu palabra empieza con la letra: "<<letra<<endl; //mostrar en pantalla los resultados del programa return 0; // finaliza programa } //termina la ejecucion del programa |
cin.ignore()
cin.ignore() se puede utilizar con 2 parametros o sin parámetros, uno lo utilizamos para la cantidad de caracteres que vamos a ignorar y el otro para decir hasta que carácter va a ignorar.
cin.ignore() se utiliza para ignorar lo que hay en el buffer y no salte la lectura de datos cuando cambia de string a int.
cin.ignore(100,’n’) cuando se declara de esta forma va a ignorar hasta 100 caracteres o hasta llegar a la letra ‘n’.
1 2 3 4 5 6 7 8 9 10 11 12 |
# include <iostream> // libreria que permite entrada y salida de caracteres using namespace std; // es para poder usar palabras reservadas int main () // cuerpo del programa { char palabra1, palabra2; //declaracion de variables (tipo char) cout<<"anote dos palabras:"<<endl; //muestra en pantalla lo que se preguntara con salto de linea palabra1=cin.get(); //para tomar solo la primera inicial cin.ignore(100,' '); // para ignorar hasta 100 caracteres e ignorara el caracter espacio palabra2=cin.get(); //para tomar solo la primera inicial de la segunda palabra cout<<"las iniciales de las palabras son: "<<palabra1<<" "<<palabra2; //resultado del programa return 0; //finaliza programa } //termina la ejecucion del programa |
cin.getline()
Este método nos deja leer strings en c++, y para poder hacer función de esto, se necesita declarar una variable tipo “string”, y hay dos formas de poder leer los datos que el usuario ingrese como las siguientes:
-
1getline(cin, “nombre de la variable”, ´caracter delimitador´)
esta forma permite solo leer la cadena hasta el carácter que lo limita.
-
1getline(cin,”nombre de la variable”)
Se puede usar también sin un carácter que delimite la cadena, y su acción será un salto de línea por defecto.
1 2 3 4 5 6 7 8 9 10 11 |
# include <iostream> // libreria que permite entrada y salida de caracteres using namespace std; // es para poder usar palabras reservadas int main () // cuerpo del programa { string cadena; //declaracion de variable (tipo string) cout<<"ingrese una palabra:"; //muestra en pantalla lo que se preguntara " " getline(cin,cadena,'u'); //como se utiliza getline cout<<"la cadena de tu palabra es:"<<cadena; //mostrar en pantalla los resultados del programa return 0;// finaliza programa } //termina la ejecucion del programa |
Inténtelo en su compilador para ver resultados.
Leer con cin en c++ sin los espacios
En C++ es posible leer datos separados por espacios en blanco o enter, por medio del operador de extracción cin (>>).
Y si se quieren leer caracteres incluyendo los espacios en blanco o enter, se utiliza el método de get.
Get extrae un carácter de cin y lo guarda como una variable. Si se extrae y es el fin del fichero, se activa el indicador de fin de fichero. Si el buffer de entrada se encuentra vacío, cuando el programa llega a la instrucción, se detiene en espera de teclear un caracter y pulsar enter.
cin.get (carácter)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# include <iostream> // libreria que permite entrada y salida de caracteres using namespace std; // es para poder usar palabras reservadas int main () //cuerpo del programa { int numero; //variable tipo entero char c; //variable tipo caracter cout<<"escribe un numero entero:"; //muestra en pantalla lo que se preguntara " " cin>>numero; //lo que el usuario ingresa cout<<"en numero es:"<<((numero%2==0)? "par" : "impar")<<endl; //resultado de la ejecucion cout<<"introduce un caracter:"; // muestra en pantalla al usuario leer un caracter cin.get(c); //utilizacion del metodo get cout<<"el caracter " << ((c>='a' and c<='z')?"es":"no es"); //muestra resultado de la pregunta cout<<" una letra minuscula"<<endl; //complementa el resultado return 0; //finaliza el programa } //termina cuerpo del programa |
El enter también se toma como un carácter ya que se lee como un flujo de entrada después de introducir el entero, y para poder evitar que pase este problema se debe limpiar el buffer con el método de ignore.
Limpiar el buffer con cin en C++ usando el método ignore
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# include <iostream> // libreria que permite entrada y salida de caracteres using namespace std; // es para poder usar palabras reservadas int main () //cuerpo del programa { int numero; //variable tipo entero char c; //variable tipo caracter cout<<"escribe un numero entero:"; //muestra en pantalla lo que se preguntara " " cin>>numero; //lo que el usuario ingresa cout<<"en numero es:"<<((numero%2==0)? "par" : "impar")<<endl; //resultado de la ejecucion //limpia el buffer cin.ignore(numeric_limits<int>::max(),'\n'); //metodo para limpiar el buffer cout<<"introduce un caracter:"; // muestra en pantalla al usuario leer un caracter cin.get(c); //utilizacion del metodo get cout<<"el caracter " << ((c>='a' and c<='z')?"es":"no es"); //muestra resultado de la pregunta cout<<" una letra minuscula"<<endl; //complementa el resultado return 0; //finaliza el programa } //termina cuerpo del programa |
Leer con cin en c++ con los espacios
El operador de extracción sobre cin no sirve para leer cadenas de caracteres con espacios en blanco. Para esto se utiliza el método getline.
cin.getline(cadena, número, carácter final)
Getline lee la serie de caracteres desde el flujo de entrada y los guarda en la variable cadena. Se leen hasta el final del flujo, hasta el primer carácter que coincide con el carácter final que se haya especificado. Getline añade el carácter nulo al final de la cadena de manera automática.
El siguiente programa muestra la diferencia al leer cadenas de caracteres con y sin el método de getline:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# include <iostream> // libreria que permite entrada y salida de caracteres using namespace std; // es para poder usar palabras reservadas int main () // cuerpo del programa { char nombre[40]; //declaracion de variable (tipo char) cout<<"cual es tu nombre completo?: "; //muestra en pantalla lo que se preguntara " " cin.getline(nombre,40); //utilizacion del getline cout<<"saludos! "<<nombre<<endl; //muestra en pantalla lo que se preguntara " " junto con nombre cout<<"cual es tu nombre completo?: "<<endl; //pedir nombre pero sin espacios cin>>nombre; //ingresar el nombre cout<<"saludos! "<<nombre; //muestra en pantalla lo que se preguntara " " junto con nombre return 0; //termina programa } //termina cuerpo del programa |
Los codigos están mal