Título: Duda bucle do while Publicado por: program_10 en 11 Enero 2015, 00:12 am Hola chicos, os voy a comentar una dudilla que tengo acerca de una práctica que nos han propuesto en clase. El enunciado es el siguiente:
Una función llamada “lector_de_enteros” que pida al usuario un número entero y devuelva el número leído. Una función llamada “lector_de_opciones” que reciba un valor máximo, pida al usuario un valor entre 1 y el valor máximo (usando la función “lector_de_enteros”) y devuelva el valor elegido. Si el usuario introduce un valor fuera de rango avisar del error y repetir la lectura del valor, y así hasta que sea correcto. Las funciones que he hecho son las siguientes: Código
El enunciado sigue con lo siguiente para el int main () [LA FUNCIÓN PRINCIAPAL] Mostrar el menú principal y dejar al usuario elegir una opción. Pues bien, mi propuesta es ésta pero no sé porque no funciona, porque ponga el número que ponga el programa sigue. Código
Mod: Modificado. Cuando publiques codigo, procura usar etiquetas GeSHi Título: Re: Duda bucle do while Publicado por: engel lex en 11 Enero 2015, 00:28 am no termino de entender el problema
pero hago un par de correciones 1. el do-while se diferencia del while porque evalua al final... es decir Código
en el primer caso el while se evalua y se salta... en el segundo caso, el do se ejecuta, pero al llegar al final no se repite porque no pasa la evaluación así que tu codigo siempre va a pasar el error de Citar Vuelve a introducir un numero que este dentro del rango, por favor aunque sea valido2. te dicen que uses la funcion "lector de enteros", pero dentro del do-while en la linea 16 no lo usas... debería ser igual que en la linea 11... Título: Re: Duda bucle do while Publicado por: Yoel Alejandro en 11 Enero 2015, 01:46 am Con las correcciones propuestas por engelx, creo que quedaría así
Código
Título: Re: Duda bucle do while Publicado por: program_10 en 11 Enero 2015, 14:12 pm Gracias por vuestra ayuda
He probado el código con las correciones y me sale por pantalla lo siguiente: 1- Saludar 2- Despedir 3- Conversar 4- Terminar Introduce un numero entre 1 y 4Vuelve a introducir un numero que este dentro del rango, por favor: :huh: Título: Re: Duda bucle do while Publicado por: engel lex en 11 Enero 2015, 14:23 pm usa el debugger de tu compilador a ver donde estás haciendo algo erroneo
Título: Re: Duda bucle do while Publicado por: Yoel Alejandro en 11 Enero 2015, 16:26 pm Jejeje, claro ahora lo veo y creo que la razón era muy tonta. En la condición del while, debe ser "menor que 1" en lugar de "menor o igual que 1", a fin que el ciclo se active sólo cuando el número está fuera de rango.
Quedaría de este modo (pruébalo y me dices) Código
.... Y por cierto, introduje un endl antes de la frase "Vuelve a introducir un numero que este dentro del rango, por favor:", para producir el salto de línea respectivo antes de la misma y se vea más estético Título: Re: Duda bucle do while Publicado por: rir3760 en 11 Enero 2015, 16:34 pm También se debe cambiar el operador && por ||.
Un saludo Título: Re: Duda bucle do while Publicado por: program_10 en 11 Enero 2015, 16:40 pm Pero.........de esa forma no dejaría introucir ni el 1 ni el 4, no?
Asi que estaría mal Título: Re: Duda bucle do while Publicado por: Yoel Alejandro en 11 Enero 2015, 16:46 pm Ups, .... gracias rir3760, faltaba eso.
Claro que sí permitiría el 1 y el 4, pues la condición sólo fallaría para un número menor a 1 o mayor a 4, es decir un número como 0, o como 5. Pruébalo y verás que funciona, reemplazando antes el "&&" por "||" Título: Re: Duda bucle do while Publicado por: program_10 en 11 Enero 2015, 16:56 pm He probado con vuestras correcciones y ahora, pongo 2 y me lo da como error.......... :rolleyes:
Os prestáis alguno como salvadores dándome vuestro correo para pasaros la práctica y el código que llevo? GRACIAS. Título: Re: Duda bucle do while Publicado por: Yoel Alejandro en 11 Enero 2015, 17:11 pm Acabo de revisar, el error está en la ubicación del return, que lo haces dentro del while. Si el while no se ejecuta, entonces la instrucción return tampoco, por lo que función devuelve un valor por defecto 0.
La solución está en colocar el return fuera del while Con la correción, aquí el programa que compuse para la prueba: Código
y parece funcionar bien (pruébalo tú y me dices:) Código: yoel@yoel-pc:~/Documentos/C/test$ ./test |