Autor
		 | 
		
			Tema: Duda bucle do while  (Leído 5,158 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
						 | 
						
							19,055
						 | 
						
							 
							
								17 Diciembre 2008, 17:43 pm 
								por Dem0ny
							
						 | 
					 
					
						
							 
						 | 
						
							 
						 | 
						
							duda con bucle for
							 
							Java
						 | 
						
							andaluz
						 | 
						
							1
						 | 
						
							2,635
						 | 
						
							 
							
								 4 Mayo 2010, 22:35 pm 
								por Chuidiang
							
						 | 
					 
					
						
							 
						 | 
						
							 
						 | 
						
							Duda bucle do...while
							 
							PHP
						 | 
						
							elkiy
						 | 
						
							2
						 | 
						
							2,391
						 | 
						
							 
							
								22 Febrero 2013, 15:17 pm 
								por elkiy
							
						 | 
					 
					
						
							 
						 | 
						
							 
						 | 
						
							Duda C# Bucle While.
							 
							.NET (C#, VB.NET, ASP)
						 | 
						
							FKT
						 | 
						
							5
						 | 
						
							2,775
						 | 
						
							 
							
								18 Agosto 2015, 16:05 pm 
								por FKT
							
						 | 
					 
					
						
							 
						 | 
						
							 
						 | 
						
							MOVIDO: Duda C# Bucle While.
							 
							Programación C/C++
						 | 
						
							Eternal Idol
						 | 
						
							0
						 | 
						
							1,588
						 | 
						
							 
							
								18 Agosto 2015, 11:36 am 
								por Eternal Idol
							
						 | 
					 
				 
			    |