Foro con Clase C/C++

Cin ignore en objeto

El mono

Nº de hilos:1

Nº de mensajes:3

miércoles, 27 de octubre de 2021


Buenos dias, estoy aprendiendo a manipular objetos.

De manera sencilla y resumida, quiero establecer un menu con while, ese menu da la opcion de cargar nombre completo de una persona. Cuando yo llamo al objeto y utilizo la propiedad declarada en el objeto para ingresar el nombre, al tener nombre y apellido se debe ingresar un espacio. Si yo coloco cin.ignore();  y luego llamo  acargar el nombre, lo carga. Despues de cargar, vuelve el menu de while pero todo bugueado y se cierra el programa. 

Tema cerrado

El mono

Nº de hilos:1

Nº de mensajes:3

miércoles, 27 de octubre de 2021


Un ejemplo de lo que digo:

class Datos{

private:

char nombreyapellido[42];

public:

void cargar();

};

int main(){

Objeto obj;


while (){

case x: obj.cargar;

}


Datos::cargar{

cin.ignore(1);
cin.getline(nombreyapellido,42);
}

estos ultimo me da error. no me respeta el ignore

Tema cerrado

Salvador Pozo

Nº de hilos:0

Nº de mensajes:25

jueves, 28 de octubre de 2021


Hola:

Por lo que puedo deducir, estás procesando un menú, y teniendo en cuenta un único carácter para elegir la opción en un bucle while.

Como las aplicaciones de consola necesitan que pulses la tecla return para que se procese la entrada del teclado, siempre quedarán caracteres después del que necesitas para elegir la opción correcta del menú, y de ahí que haya que vaciar el buffer antes de hacer nuevas lecturas.

Por este tipo de problemas siempre resulta frustrante trabajar con aplicaciones de consola, y las posibles soluciones dependerán de la forma en que proceses las entradas de teclado en cada caso.

Para empezar prueba con esta línea:

cin.ignore(200, '\n');

Por defecto, usando un valor relativamente grande para el primer parámetro nos aseguramos de que eliminamos casi cualquier entrada que el usuario haga después de la que se tomará para procesar el menú. El segundo parámetro de 'ignore' es EOF por defecto, que es el carácter que indica el fin de fichero. Esto no es útil si leemos desde el teclado, ya que nunca se introducirá ese carácter, que generalmente se encuentra en ficheros de texto. En su lugar podemos usar el carácter de fin de línea, que corresponde al return. Esta línea leerá caractares desde el buffer hasta que haya leído 200, o hasta que encuentre el primer retorno de línea.

Funcionará aunque el retorno de línea se convierta a dos caracteres, que suele ser lo habitual, al menos en Windows "\r\n".

No funcionará si el usuario es un poco troll e introduce más de 200 caracteres. Pero las aplicaciones de consola tienen que contar con que el usuario se comporta de una forma civilizada. :)

Hasta pronto.

--

Salvador Pozo

Tema cerrado

El mono

Nº de hilos:1

Nº de mensajes:3

jueves, 28 de octubre de 2021


Gracias. la respuesta es correcta y la encontre antes de leer tu sugerencia/respuesta.

Tema cerrado