El menú se imprime dos veces y el valor por defecto se ejecuta incluso cuando no coincide el caso.
Estoy intentando mostrar al usuario un menú y permitirles elegir entre las opciones. Está en un bucle while porque tiene que iterar hasta que se elija la opción “e” para salir del programa. Incluí la opción “default” como medida de seguridad en caso de que el usuario ingrese un valor que no sea aceptado. El caso predeterminado siempre se ejecuta sin importar lo que haga y el menú siempre aparece dos veces después de la ejecución inicial del código.
He intentado cambiar “getchar()” por scanf y todavía produce la misma salida duplicada. También he intentado eliminar completamente el interruptor, pero obtengo el mismo resultado utilizando declaraciones if/then. Adjunto mi código completo y cualquier ayuda es apreciada, ¡gracias!
davy.ai
Resolución de problemas en un bucle de menú en C
Problema
El usuario está creando un menú que permite seleccionar opciones hasta que se elija salir del programa. Sin embargo, el menú aparece dos veces después de la ejecución inicial del código. Además, el caso predeterminado siempre se ejecuta independientemente de la entrada que se ingrese.
Solución
El código actual incluye la función
menu ()
que muestra las opciones del menú al usuario. La funciónoptions ()
toma una opción del menú seleccionada como entrada y la procesa con una instrucciónswitch
para determinar qué acción se debe tomar. Finalmente, la función principal contiene un buclewhile
que llama a la funciónmenu ()
y luego espera la entrada del usuario congetchar ()
. Si el usuario ingresa una selección válida, se llama a la funciónoptions ()
con la selección del usuario. Este bucle continúa hasta que el usuario selecciona la opción “salir”.El problema con el código actual es que la función
getchar ()
está consumiendo el carácter de nueva línea que el usuario ingresa después de hacer una selección. Sin embargo, este carácter de nueva línea no se está considerando en la funciónoptions ()
, lo que hace que se ejecute el caso predeterminado. Además, el carácter de nueva línea se devuelve a la funciónmenu ()
, lo que hace que se muestre el menú dos veces.Para solucionar este problema, podemos modificar la función
options ()
para que también consuma el carácter de nueva línea utilizando otra llamadagetchar ()
. Además, podemos modificar la funciónmenu ()
para incluir un carácter de nueva línea al final de su salida para asegurarnos de que solo se muestre un menú.Aquí hay una versión actualizada del código con estos cambios:
Con estos cambios, el menú se mostrará solo una vez y el caso predeterminado solo se ejecutará cuando el usuario ingrese una entrada no válida.</stdlib.h></stdio.h>