Autor
|
Tema: Duda bucle do while (Leído 4,550 veces)
|
program_10
Desconectado
Mensajes: 11
|
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: int lector_de_enteros() { int numero = 0; cin >> numero; return numero; } int lector_de_opciones(int valor_maximo) { int valor_elegido=0; cout << " Introduce un numero entre 1 y " << valor_maximo; valor_elegido = lector_de_enteros(); do { cout << "Vuelve a introducir un numero que este dentro del rango, por favor:\n"; cin >> valor_elegido; }while (valor_elegido <=1 && valor_elegido >= valor_maximo); return valor_elegido; }
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. int maximo = 4; muestra_menu_principal(); cout << endl; lector_de_opciones (maximo);
Mod: Modificado. Cuando publiques codigo, procura usar etiquetas GeSHi
|
|
« Última modificación: 11 Enero 2015, 00:18 am por engel lex »
|
En línea
|
|
|
|
engel lex
|
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 int numero = 21; while(numero<10){ cout<<"numero menor que 10" << endl; } do{ cout <<"cualquier numero"<<endl; }while(numero<10)
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 Vuelve a introducir un numero que este dentro del rango, por favor aunque sea valido
2. 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...
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
Yoel Alejandro
|
Con las correcciones propuestas por engelx, creo que quedaría así int lector_de_opciones(int valor_maximo) { int valor_elegido=0; cout << " Introduce un numero entre 1 y " << valor_maximo; valor_elegido = lector_de_enteros(); while ( valor_elegido <=1 && valor_elegido >= valor_maximo ) { { cout << "Vuelve a introducir un numero que este dentro del rango, por favor:\n"; valor_elegido = lector_de_enteros(); // <-- correccion } return valor_elegido; }
|
|
|
En línea
|
Saludos, Yoel. P.D..- Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
|
|
|
program_10
Desconectado
Mensajes: 11
|
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:
|
|
|
En línea
|
|
|
|
engel lex
|
usa el debugger de tu compilador a ver donde estás haciendo algo erroneo
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
Yoel Alejandro
|
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) int lector_de_opciones(int valor_maximo) { int valor_elegido=0; cout << " Introduce un numero entre 1 y " << valor_maximo; valor_elegido = lector_de_enteros(); while ( valor_elegido < 1 && valor_elegido > valor_maximo ) { // <-- correci'on aqu'i { cout << endl << "Vuelve a introducir un numero que este dentro del rango, por favor:" << endl; valor_elegido = lector_de_enteros(); // <-- correccion } return valor_elegido; }
.... 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
|
|
|
En línea
|
Saludos, Yoel. P.D..- Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
También se debe cambiar el operador && por ||.
Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
program_10
Desconectado
Mensajes: 11
|
Pero.........de esa forma no dejaría introucir ni el 1 ni el 4, no? Asi que estaría mal
|
|
|
En línea
|
|
|
|
Yoel Alejandro
|
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 "||"
|
|
|
En línea
|
Saludos, Yoel. P.D..- Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
|
|
|
program_10
Desconectado
Mensajes: 11
|
He probado con vuestras correcciones y ahora, pongo 2 y me lo da como error.......... Os prestáis alguno como salvadores dándome vuestro correo para pasaros la práctica y el código que llevo? GRACIAS.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Duda (Parar bucle con dato boolean) [bucle while]
Java
|
Dem0ny
|
5
|
18,610
|
17 Diciembre 2008, 17:43 pm
por Dem0ny
|
|
|
duda con bucle for
Java
|
andaluz
|
1
|
2,429
|
4 Mayo 2010, 22:35 pm
por Chuidiang
|
|
|
Duda bucle do...while
PHP
|
elkiy
|
2
|
2,130
|
22 Febrero 2013, 15:17 pm
por elkiy
|
|
|
Duda C# Bucle While.
.NET (C#, VB.NET, ASP)
|
FKT
|
5
|
2,541
|
18 Agosto 2015, 16:05 pm
por FKT
|
|
|
MOVIDO: Duda C# Bucle While.
Programación C/C++
|
Eternal Idol
|
0
|
1,384
|
18 Agosto 2015, 11:36 am
por Eternal Idol
|
|