Aquí, se está cerrando antes de dar la entrada. Parece que el problema se debe a que no está vaciando el búfer de entrada que podría tener algunos caracteres no deseados. ¿Hay alguna alternativa para vaciar (stdin). Este fragmento de código funciona en Solaris pero no funciona en Linux.
primera línea de man fflush lee: La función fflush() fuerza un escribe de todos los datos almacenados en búfer en el espacio de usuario para el salida o actualización Arroyo. cnicutar tiene la respuesta correcta sobre cómo omitir entradas no deseadas, pero además de eso, deberían lea los documentos de las funciones que está utilizando. Y verifique su valor de retorno… ya que su llamada anterior habrá regresado EOF y establecer errno = EBADF para señalar su uso indebido de la función. Ignorar los valores devueltos es malo, malo, malo…
while((c = getchar()) != '\n' && c != EOF)
/* discard the character */;
El hecho de que vaciar stdin funcione en algunas implementaciones Está Mal.
Algunos proveedores implementan fflush para que fflush(stdin) descarte los caracteres no leídos, aunque los programas portátiles no pueden depender de esto.
Para C en GNU
puedes usar
__fpurge(stdin);
incluya el encabezado stdio_ext.h para acceder a la función. Aunque la publicación es muy antigua, pensé que esto podría ayudar a algunos desarrolladores de Linux.
Esto es horrible, incluso si funciona según lo previsto. Imagine lo que sucede si la entrada proviene de un archivo o una tubería.
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Configurar y más información
primera línea de
man fflush
lee: La funciónfflush()
fuerza un escribe de todos los datos almacenados en búfer en el espacio de usuario para el salida o actualización Arroyo. cnicutar tiene la respuesta correcta sobre cómo omitir entradas no deseadas, pero además de eso, deberían lea los documentos de las funciones que está utilizando. Y verifique su valor de retorno… ya que su llamada anterior habrá regresadoEOF
y establecererrno = EBADF
para señalar su uso indebido de la función. Ignorar los valores devueltos es malo, malo, malo…– DevSolar
8 de junio de 2011 a las 10:57
Véase también Uso
fflush(stdin)
.–Jonathan Leffler
15 de septiembre de 2016 a las 5:31