Dev - C++ - Problemas tratando de repetir un ciclo

 
Vista:

Problemas tratando de repetir un ciclo

Publicado por Abril (4 intervenciones) el 10/10/2016 05:25:18
Buenas noches, estoy intentando hacer un programa por el que se pueda regresar al menú anterior(switch) y también salir desde los diferentes cases, el problema es que para hacerlo utilicé un do while en el switch y funciona para salir, pero cuando quiero hacerlo con los cases específicos ya no funciona, no puedo repetir el menú ni salir de el, me gustaría saber que hago mal, apenas aprendo a programar, gracias.

Este es el case en el que estoy intentando poner el menú:

case 1:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
do
{
 
 
     for(i=1;i<=10;i++)
     {
     cout<<"Dame un numero"<<endl;
     cin>>numero;
     suma=suma+numero;
     }
     cout<<"El resultado de la suma es: "<<suma<<endl;
 
     cout<<"Que quieres hacer? 1)Volver a sumar 2)Volver a menu anterior 3)Salir"<<endl;
     cin>>op;
 
     for(op=1;op>0;op++)
    {
        for(i=1;i<=10;i++)
     {
     cout<<"Dame un numero"<<endl;
     cin>>numero;
     suma=suma+numero;
     }
     cout<<"El resultado de la suma es: "<<suma<<endl;
 
     cout<<"Que quieres hacer? 1)Volver a sumar 2)Volver a menu anterior 3)Salir"<<endl;
     cin>>op;
 
    }
    if(op==2)
    {
        z=0;
    }
 
    else if(op==3)
    {
        z=1;
    }
}
while(z=0);





Aquí todo el programa por si eso aclara mas lo que intento preguntar:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include <iostream>
using namespace std;
int main()
{
 
int suma=0,opcion,numero,area,num,x=0,radio,z=0,n,i,op;
float pi=3.1416;
 
cout<<"Que quieres hacer?\n 1)Suma de 10 numeros\n 2)Calcula el area de un circulo\n 3) Adivina\n 4)Salir\n"<<endl;
cin>>opcion;
 
do
{
   switch(opcion)
     {
       case 1:
    do
    {
 
 
         for(i=1;i<=10;i++)
         {
         cout<<"Dame un numero"<<endl;
         cin>>numero;
         suma=suma+numero;
         }
         cout<<"El resultado de la suma es: "<<suma<<endl;
 
         cout<<"Que quieres hacer? 1)Volver a sumar 2)Volver a menu anterior 3)Salir"<<endl;
         cin>>op;
 
         for(op=1;op>0;op++)
        {
            for(i=1;i<=10;i++)
         {
         cout<<"Dame un numero"<<endl;
         cin>>numero;
         suma=suma+numero;
         }
         cout<<"El resultado de la suma es: "<<suma<<endl;
 
         cout<<"Que quieres hacer? 1)Volver a sumar 2)Volver a menu anterior 3)Salir"<<endl;
         cin>>op;
 
        }
        if(op==2)
        {
            z=0;
        }
 
        else if(op==3)
        {
            z=1;
        }
    }
    while(z=0);
         break;
       case 2:
         cout<<"Dame el radio del circulo"<<endl;
         cin>>radio;
 
         area=pi*(radio*radio);
         cout<<"El area del circulo es: "<<area<<endl;
         x=1;
         break;
       case 3:
         z=1;
         do
            {
         cout<<"Vamos a necesitar 2 usuarios para jugar :v \n \n"<<"Usuario 1: Escribe el numero a adivinar"<<endl;
         cin>>num;
 
         cout<<"Usuario 2: Tienes 5 intentos para adivinar, suerte!"<<endl;
 
           for(i=0;i<6;i++)
            {
            cout<<"Escribe un numero: ";
            cin>>n;
 
             suma=suma+n;
 
              if(n==num)
              {
              cout<<"Wow, adivinaste!"<<endl;
              z=0;
              }
              else if(n<num)
              cout<<"El numero a adivinar es mayor!\n"<<endl;
 
              else if(n>num)
              cout<<"El numero a adivinar es menor!\n"<<endl;
              }
              }
              while(z!=0);
         break;
        case 4:
          x=1;
          break;
      }
}
while(x==0);
return 0;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Dionicio
Val: 168
Ha aumentado 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Problemas tratando de repetir un ciclo

Publicado por Dionicio (57 intervenciones) el 10/10/2016 14:17:10
El posible problema tal vez sea que estas colocando

1
2
case X:
//Código, el case probablemente no alcance a leer todo lo puesto debajo. 

Cuando el case lleva muchas líneas de código lo mejor es hacer lo siguiente
1
2
3
case X:{
//Código entre llaves, engloba lo que quieres hacer entre llaves.
}

Prueba poniendo llaves, y comenta si te funcionó. Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Sigue sin funcionar

Publicado por Abril (4 intervenciones) el 10/10/2016 19:26:16
Gracias por tu idea. Ya intenté el programa haciendo lo que me dices pero sigue haciendo lo mismo (no funcionan), ¿Alguna otra idea?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Dionicio
Val: 168
Ha aumentado 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Intenta lo siguiente

Publicado por Dionicio (57 intervenciones) el 10/10/2016 20:24:05
El código en sí es un poco difícil de interpretar a simple vista, te recomendaría hacerlo de nuevo, paso por paso. Y tratarlo con mucho cuidado, escríbelo en un cuaderno de ser posible. Te dejaré el código editado, es casi el mismo tuyo solo con alguna que otra mejora,
pero no es que sea optimo o eficiente pero es una versión más clara.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include <iostream>
 
using namespace std;
 
int main()
{
	int suma=0,opcion,numero,area,num = 5,x=0,radio,n,i,op;
	float pi=3.1416;
 
	cout<<"Que quieres hacer?\n 1)Suma de 10 numeros\n 2)Calcula el area de un circulo\n 3) Adivina\n 4)Salir\n"<<endl;
	cin>>opcion;
 
	do{
 
		switch(opcion)
		{
			case 1:
			{
 
				for(i=1;i<=10;i++)
				{
 
				 cout<<"Dame un numero"<<endl;
 
				 cin>>numero;
 
				 suma=suma+numero;
 
				}
 
				cout<<"El resultado de la suma es: "<<suma<<endl;
				suma = 0;//Sino vuelves a suma a 0, si repites el proceso sumará el valor anterior.
				break;
			}
 
			case 2:
			{
				cout<<"Dame el radio del circulo"<<endl;
				cin>>radio;
 
				area=pi*(radio*radio);
				cout<<"El area del circulo es: "<<area<<endl;
 
				break;
			}
 
			case 3:{
 
				for(i=0;i < 6 && n != num;i++)
				{
					cout<<"Escribe un numero: ";
					cin>>n;
					//suma=suma+n;-->no entiendo el sentido de esto
 
					if(n==num)
					{
						cout<<"Wow, adivinaste!"<<endl;
					}
 
					else if(n<num)
					cout<<"El numero a adivinar es mayor!\n"<<endl;
 
					else if(n>num)
					cout<<"El numero a adivinar es menor!\n"<<endl;
				}
 
				break;
			}
 
			case 4: x = 1;break;//Para que salga del programa
 
			case 5:
			{
				cout<<"Que quieres hacer?\n 1)Suma de 10 numeros\n 2)Calcula el area de un circulo\n 3) Adivina\n 4)Salir\n"<<endl;
				cin>>opcion;
			}
		}
 
		if(opcion == 1)
		{
			cout<<"Que quieres hacer? 1)Volver a sumar 2)Volver a menu anterior 3)Salir"<<endl;
			cin>>op;
 
			if(op == 1)
			{
				opcion = op;
			}
 
			else if(op == 2)
			{
				opcion = 5;
			}
 
			else
			{
				x = 1;
			}
		}
 
		else
		{
			opcion = 5;//Vuelve a la opción donde está el menú anterior
		}
 
	}while(x == 0);
 
	return 0;
}

Consejos

*Trata de comentar el código donde lo creas necesario.
*Trata de pensar los ejercicios antes de llevarlos directamente sobre el lenguaje de programación.
*Lee libros, ve cursos en youtube o otra plataforma que los ofrezca.
*No des por vencido nunca.
*Siempre que tengas dudas pide ayuda.

Te propongo que lo hagas por tu cuenta, y el código que edité solo sea una referencia. Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Gracias

Publicado por Abril (4 intervenciones) el 11/10/2016 05:33:43
Al final mejor lo deje mas sencillo que al fin y alcabo hace mas o menos lo mismo. Muchas gracias por tus comentarios, los pondré en practica.





Me quedó algo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <iostream>
using namespace std;
int main()
{
 
int suma=0,opcion,numero,area,num,x=0,radio,z=0,n,i,op;
float pi=3.1416;
 
    do
      {
       cout<<"Que quieres hacer?\n 1)Suma de 10 numeros\n 2)Calcula el area de un circulo\n 3) Adivina\n 4)Salir\n"<<endl;
       cin>>opcion;
 
        switch(opcion)
            {
              case 1:
                 for(i=1;i<=10;i++)
             {
                 cout<<"Dame un numero"<<endl;
                 cin>>numero;
                 suma=suma+numero;
             }
                 cout<<"El resultado de la suma es: \n"<<suma<<endl;
                 break;
 
              case 2:
                 cout<<"Dame el radio del circulo: ";
                 cin>>radio;
                 cout<<endl;
 
                 area=pi*(radio*radio);
                 cout<<"El area del circulo es: "<<area<<endl;
                 cout<<endl;
                 break;
              case 3:
                 cout<<"*****Vamos a necesitar 2 usuarios para jugar :v***** \n \n"<<"Usuario 1: Escribe el numero a adivinar: ";
                 cin>>num;
 
                 cout<<"\nUsuario 2: Tienes 5 intentos para adivinar, suerte!"<<endl;
 
                   for(n=0;n<6;n++)
                     {
                       while(n!=num)
                          {
                             cout<<"\n  Escribe un numero: ";
                             cin>>n;
 
                             suma=suma+n;
 
                       if(n==num)
                           cout<<"   Wow, adivinaste!\n******FIN DEL JUEGO******\n"<<endl;
                       else if(n<num)
                           cout<<"   El numero a adivinar es mayor!"<<endl;
 
                       else if(n>num)
                           cout<<"   El numero a adivinar es menor!"<<endl;
                         }
                    }
                 break;
               case 4:
                 x=1;
                 break;
            }
      }
      while(x==0);
 
return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar