Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problemas con un bucle do/while infinito xD

Estas en el tema de Problemas con un bucle do/while infinito xD en el foro de C/C++ en Foros del Web. Buenas a todos, Estoy aprendiendo C y he creado este mini programa que es un menu con switch con diversas opciones que interactuan con el ...
  #1 (permalink)  
Antiguo 29/03/2012, 03:34
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 12 años, 11 meses
Puntos: 4
Pregunta Problemas con un bucle do/while infinito xD

Buenas a todos,

Estoy aprendiendo C y he creado este mini programa que es un menu con switch con diversas opciones que interactuan con el usuario para decidir si proceder, salir, realizar otra operación... El caso es que con tanto do/while hay operaciones que no llegan ni a inicializarse. Haber que les parece:

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. float areaTriangulo(float pBase, float pAltura);
  6. float areaRectangulo(float pLado1, float pLado2);
  7.  
  8. int main(){
  9.     float base, altura, lado1, lado2, lado3, area, perimetro;
  10.     char seleccion,respuesta
  11.     //int deseaContinuar = 1;
  12.  
  13. do
  14. {
  15.  
  16.     printf("Selecciona el area de un triangulo o un rectangulo(t/r) \n");
  17.     scanf("%c",&seleccion);
  18.    
  19.     do
  20.     {
  21.  
  22.         switch(seleccion)
  23.         {
  24.             case 't':
  25.                 system("CLS");
  26.                 printf("Hola soy un triangulo\n");
  27.                 printf("Digiste la base: \n");
  28.                 scanf("%f",&lado1);
  29.                 printf("Digiste la altura: \n");
  30.                 scanf("%f",&lado2);
  31.                 printf("%.2f \n",areaTriangulo(lado1, lado2));
  32.                 getch();
  33.  
  34.  
  35.                 break;
  36.             case 'r':
  37.                 system("CLS");
  38.                 printf("Hola soy un rectangulo\n");
  39.                 printf("Digiste el largo: \n");
  40.                 scanf("%f",&lado1);
  41.                 printf("Digiste el ancho: \n");
  42.                 scanf("%f",&lado2);
  43.                 printf("%.2f \n",areaRectangulo(lado1, lado2));
  44.                 getch();
  45.                 break;
  46.  
  47.             case 'e':
  48.             case 'E':
  49.                  break;
  50.                  
  51.             default:
  52.                     printf("Error: Opcio incorrecta");
  53.                     printf("Aprieta una tecla correcta ...");
  54.                     getch();
  55.                
  56.         }/*fin del switch*/
  57.      
  58.      }while((seleccion!='e')&&(seleccion!='E'));
  59.      
  60.      do
  61.      {
  62.          printf("Quieres realizar otra operación?(S/N)");
  63.          respuesta=getch();
  64.          
  65.          }while((respuesta!='S')&&(respuesta!='N'));
  66.      
  67.      }while(respuesta=='S');
  68.        
  69.  
  70.     system("PAUSE");
  71.     return 0;
  72. }
  73.  
  74. float areaTriangulo(float pBase, float pAltura)
  75. {
  76.     float areaTriangulo = pBase*pAltura*0.5;
  77.     return areaTriangulo;
  78. }
  79. float areaRectangulo(float pLado1, float pLado2)
  80. {
  81.     float areaRectangulo = pLado1*pLado2;
  82.     return areaRectangulo;
  83. }

Haber si consiguen solucionarme el uso del do/while para que no me vuelva a suceder más por que llebo horas haciendo pruebas sin ver mi error.

Grácias por su tiempo.

Saludos!
  #2 (permalink)  
Antiguo 29/03/2012, 08:48
Avatar de fradve  
Fecha de Ingreso: abril-2009
Mensajes: 157
Antigüedad: 15 años
Puntos: 7
Respuesta: Problemas con un bucle do/while infinito xD

Estimado sven_uri, no era necesario tanto while, solo con el primero basta para que se presente nuevamente tu menu si eliges de si (S).

Tu código con unas pequeñas modificaciones quedaría así:

Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
float areaTriangulo(float pBase, float pAltura);
float areaRectangulo(float pLado1, float pLado2);
 
int main(){
    float base, altura, lado1, lado2, lado3, area, perimetro;
    char seleccion,respuesta
    //int deseaContinuar = 1;
 
	do
	{	 
		printf("Selecciona el area de un triangulo o un rectangulo(t/r) \n");
		scanf("%c",&seleccion);
		 
		switch(seleccion)
		{
			case 't':
				system("CLS");
				printf("Hola soy un triangulo\n");
				printf("Digiste la base: \n");
				scanf("%f",&lado1);
				printf("Digiste la altura: \n");
				scanf("%f",&lado2);
				printf("%.2f \n",areaTriangulo(lado1, lado2));
				getch(); 
				break;
			case 'r':
				system("CLS");
				printf("Hola soy un rectangulo\n");
				printf("Digiste el largo: \n");
				scanf("%f",&lado1);
				printf("Digiste el ancho: \n");
				scanf("%f",&lado2);
				printf("%.2f \n",areaRectangulo(lado1, lado2));
				getch();
				break; 
			default:
					printf("Error: Opcion incorrecta");
					printf("Aprieta una tecla correcta ...");
					getch();
			   
		}/*fin del switch*/		 
	
		 printf("Quieres realizar otra operación?(S/N)");
		 respuesta=getch();		 
	}while(respuesta!='N'||respuesta!='n');
	system("PAUSE");
	return 0;
}
 
float areaTriangulo(float pBase, float pAltura)
{
    float areaTriangulo = pBase*pAltura*0.5;
    return areaTriangulo;
}
float areaRectangulo(float pLado1, float pLado2)
{
    float areaRectangulo = pLado1*pLado2;
    return areaRectangulo;
}
saludos
__________________
En programación hay mil y un formas de hacer lo mismo...
  #3 (permalink)  
Antiguo 29/03/2012, 11:32
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 12 años, 11 meses
Puntos: 4
Respuesta: Problemas con un bucle do/while infinito xD

Genial! Ahora me funciona mucho mejor jejeje.

Lo unico que me falla ahora des de tu sugerencia es que cuando le digo que no quiero realizar ninguna otra operación vuelve a preguntarme que operación quiero realizar (si triangulo o rectangulo).

Cómo puedo solucionarlo? Con un if?

Código C:
Ver original
  1. if (respuesta='N') || (respuesta='n')
  2.     {
  3.          printf("Grácias y hasta otra ocasión");
  4.          getch();
  5.      }
  #4 (permalink)  
Antiguo 29/03/2012, 11:34
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 12 años, 11 meses
Puntos: 4
Respuesta: Problemas con un bucle do/while infinito xD

Vale, solucionado, pero como lo haria para finalizar el programa? Por que escribiendo: break(); no funcionaria no?

Última edición por sven_uri; 29/03/2012 a las 11:42
  #5 (permalink)  
Antiguo 30/03/2012, 07:57
Avatar de fradve  
Fecha de Ingreso: abril-2009
Mensajes: 157
Antigüedad: 15 años
Puntos: 7
Respuesta: Problemas con un bucle do/while infinito xD

cambia la condición del while a esto y listo

while(respuesta=='S'||respuesta=='s');

se me paso por alto
__________________
En programación hay mil y un formas de hacer lo mismo...

Etiquetas: bucle, do-while, infinito, int, programa, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:26.