You are on page 1of 3

Fucnion cin.

ignore() en c++

Hola a todos, estoy ahora trabajando en un proyecto de clase en C++ y me he encontrado


con un problema que no consigo solucionar.

El proyecto consiste en pasar de C a C++ un trabajo que nos mandaron, y en la guia nos
indican que cin.ignore() es equivalente a fflush(stdin).

El caso es que he probado a ver como se utilizaba, con el siguiente ejemplo:

Citar
#include <iostream>
using namespace std;

int main () {
char first[80], second[20];

cout << "Enter your first string: ";


cin.ignore();
cin.getline (first, sizeof(first));

cout << "Enter your second string: ";


cin.ignore();
cin.getline (second, sizeof (second));

cout << "Your first string is: " << first << endl;
cout << "And your second is: " << second << endl;

return 0;
}

Tal y como esta, cuando me muestra las cadenas, me las muestra mal porque parece ser
que ha descartado la primera letra de ambas.

He probado poniendo el cin.ignore() detras del cin.getline() y entonces lo que sucede es


que tras escribir la cadena y dar a enter, el programa se queda esperando a que vuelva a
pulsar enter y enconces continua, y en este segundo caso ya muestra bien las cadenas.

El caso esque ninguna de estas dos cosas me sirve, pues necesito que simplemente
descarte los retornos de carro sin quedarse esperando que apriete una tecla y sin
descartarme caracteres de la cadena.

Si podeis explicarme donde he de colocarlo, y si es necesario colocarlo con cada


cin.getline os estaria muy agradecido, porque al parecer no funciona como yo he creido
entender aqui: http://www.cplusplus.com/reference/iostream/istream/ignore/

Un saludo y muchas gracias

En línea

Littlehorse Re: Funcion cin.ignore()


All the « Respuesta #1 en: 12 Abril 2010, 00:13 »
world's a
stage El problema sucede queda contenido basura en el buffer de entrada.
Moderador La idea del cin.ignore es ignorar ese contenido restante, utilizando alguna
de las 3 maneras posibles para ello.
Desconectado Cuando haces algo como:

Mensajes: Código
2.714
1. int var;
2. std::cin >> var;

Nie Dam Sie


Suponiendo que ingresas 20[enter], ese salto de linea queda en el buffer,
entonces, si vos luego haces esto:

Código

1. std::cin.getline(cad, 50);

Automáticamente lees el salto de linea y el resultado es una cadena vacía,


lo cual es lo que no queremos. Ahí es cuando entra el cin.ignore,
utilizándolo en el medio del cin y del cin.getline.

Hay 3 formas de llamar a cin.ignore.

Código

1. std::cin.ignore(); //descartas un carácter.


2. std::cin.ignore(10); //descartas 10 caracteres.
3. std::cin.ignore(10, '\n'); //descartas 10
caracteres, o un salto de linea. Lo que aparezca
primero

Cualquier cosa ya sabes.

Saludos!

You might also like