[ Foro de C ]

Dudas con fflush y getchar

28-Jul-2014 21:17
Invitado (Sergio)
2 Respuestas

Esta vez os escribo para saber que diferencia hay entre usar getchar()='\n' y fflush (stdin) a la hora de borrar el intro del buffer al introducir datos con gets y scanf simultaneamente y la diferencia entre la otra alternativa que es usar sscanf despues de gets y con scanf asi como porque no se recomienda usar el goto o si es necesario poner en los struct un nombre auxiliar puesto que yo no he tenido necesidad de poner ese texto auxiliar a la hora de realizar los ejercicios y otra diferencia es que algunos ponen al final getchar() un par de veces y otros ponen lo de system y return ¿me lo podeis aclarar un poco?.

Un saludo.


28-Jul-2014 22:08
Luis Torres (+18)

fflush(stdin) no forma parte del lenguaje C estándar, por lo que no será reconocido por cualquier compilador de cualquier sistema operativo. La otra forma de vaciar el buffer de entrada sí es reconocida por cualquiera.
Saludos.


31-Jul-2014 15:06
Nacho Cabanes (+83)

Hay demasiadas preguntas juntas... y la mayoría son poco claras... a ver si consigo organizar mi respuesta un poco, por si acaso te sirve de algo...

- diferencia hay entre usar getchar()='\n' y fflush (stdin) a la hora de borrar el intro del buffer al introducir datos con gets y scanf simultaneamente

No entiendo eso del '\n' que dices. La alternativa "simple" es leer un carácter adicional, que es la que demuestra que entiendes que si lees un número o un carácter, se puede quedar un '\n' en el buffer del teclado. Esa lectura de un carácter se puede hacer con %c o con un getchar, entre otras alternativas.

fflush es una orden más avanzada, de manejo de ficheros, y que debería ser usada en casos puntuales en los que necesites vaciar el buffer de entrada. Usar esa para leer un número me parece innecesariamente complejo.

- diferencia entre la otra alternativa que es usar sscanf despues de gets y con scanf

Aquí tampoco acabo de entender a lo que te refieres (pon ejemplos). Si usas "sscanf" después de "gets", no uses "scanf" y simplificas toda la lógica. De hecho, "gets" está obsoleto (tengo que actualizar la versión web de mi curso; en la PDF ya está indicado desde hace más de dos años...)

- porque no se recomienda usar el goto

Porque rompe la estructura lógica de un programa, que se debería poder leer "de arriba a abajo".

-  si es necesario poner en los struct un nombre auxiliar puesto que yo no he tenido necesidad de poner ese texto auxiliar a la hora de realizar los ejercicios y otra diferencia

Sólo es necesario cuando estás declarando un tipo de datos. Si vas a crear todas las variables de tipo "struct" exactamente en el momento en que defines el struct, no es necesario.

- algunos ponen al final getchar() un par de veces y otros ponen lo de system y return ¿me lo podeis aclarar un poco?.

En cuanto al getchar y al system: Si usas un entorno "visual" para programar en C, la pantalla se cerrará cuando tu programa termine. La alternativa buena es, ya que aprendes un lenguaje "de profesionales", trabajar como un profesional, compilando desde línea de comandos o con un editor "bueno pero ligero" como Geany. La alternativa de los perezosos es instalar un compilador Visual como si fueran a crear el próximo AutoCad y luego tener que poner una pausa al final de cada programa, porque ese entorno da por sentado que no vas a crear programas "de consola" con él y te cierra la ventana sin dejarte leerla.

En cuanto al return: en un C moderno, todos los programas deberían terminar con "return 0" si no existe ningún error (nuevamente, te remito a cualquier versión reciente en PDF de mi curso de C).






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)