Ver Mensaje Individual
  #53 (permalink)  
Antiguo 01/06/2012, 08:53
sam90
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 13 años, 11 meses
Puntos: 228
Respuesta: FAQs del lenguaje C y sus variantes

Problema: ¿Despues de un scanf(...) se saltea un gets o un getline ?
Lenguaje: C/C++
Respuesta: Esto ocurre porque al precionar enter para confirmar los datos del scanf en el buffer de escritura queda el caracter '\n' que es suministrado por el enter. Entonces cuando ponemos un gets o un getline se encuentra con ese caracter y automaticamente retorna una linea vacia.

Para solucionar este problema tenemos que limpiar el buffer de la siguiente manera:

Código C:
Ver original
  1. while (getchar() != '\n') ;

Esa instruccion consume el buffer hasta encontrar el caracter nueva linea, pero no lo deja en el buffer, lo elimina tambien.

Esto lo podemos meter dentro de una funcion:
Código C:
Ver original
  1. void Limpiar() {while (getchar() != '\n') ;}

O sino usar un macro:

Código C:
Ver original
  1. #define LIMPIAR while (getchar() != '\n') ;

Saludos