Ayuda con menú en c++

Iniciado por Noemicr20, 29 Mayo 2021, 14:48 PM

0 Miembros y 1 Visitante están viendo este tema.

Noemicr20

Hola qué tal, soy nueva en esto y tengo un proyecto de la escuela donde estoy teniendo algunos problemas ya que al elegir la opción "3" no acaba el programa como debería de ser,sino que hace la pregunta,así como al elegir la opción de los triángulos quisiera poder volver a elegir lo valores y no que me regresara al menú principal,alguien sabe Me podría dar un consejo o decirme en que estoy fallando? Se los agradecería mucho.

Código (cpp) [Seleccionar]


#include <iostream> // librería de entrada y salida
#include <cstdlib> // librería estándar

using namespace std; // espacio de trabajo
int main(int argc, char * argv[])
{ // función o programa principal
char resp=' '; /* variable de tipo char que guardar la respuesta de si desea regresar al menú principal*/
int op=0;
do{  /*  Inicia el ciclo */
system("CLS"); /* CLS es el comando para limpiar pantalla */

cout<<"       M E N "<< char(233) << "   P R I N C I P A L"<< endl;
cout<<" 1.-"; cout<<char(168) <<"Que tipo de triangulo es?"<< endl;
cout<<" 2.-Datos de los integrantes del equipo"<< endl;
cout<<" 3.-Salir"<< endl;

cout <<"Ingresa la opcion deseada"<< endl;
cin>> op;
switch (op)
{


case 1:
{
int l1,l2,l3;

char respu=' ';
do{


cout << "Ingresa los tres lados del triangulo"<< endl;
cin>>l1;
cin>>l2;
cin>>l3;


if (l1==l2&&l1==l3&&l2==l3)
{
cout << "Triangulo equilatero"<< endl;
}
else if (l1==l2||l1==l3||l2==l3)
{
cout <<"Triangulo isosceles"<< endl;
}
else if (l1!=l2&&l1!=l2&&l2!=l3)
{
cout << "Triangulo Escaleno"<< endl;
}
cout <<"Deseas saber otro tipo de triangulo?"<< endl;


}
while((respu =='S')||(respu == 's'));

break;
} ///////

case 2:
{
cout << "Datos de los integrantes del equipo: "<<endl;
cout << "Lluvia Noemi Campos Rios"<<endl;
cout << "2do 'C'"<<endl;
break;
}
/////////
case 3:
{
cout << "Hasta luego!";
break;
}
return 0;
}




cout<<char(168)<<"Desea regresar al men"<< char(163) <<" principal (S/N)"<< char (63)<<"  ";  /* imprime la pregunta de si desea regresar al menú. *//* char(numero) es para imprimir caracteres especiales, numero representa el número en ASCII, 163 es la ú, 168 es ¿, 63 es ? */
cin>>resp; }
while((resp == 'S') || (resp == 's'));
system("PAUSE");
return 0; }

fzp

Las cosas que veo yo.

Hay dos 'return 0' de los cuales el primero creo que no se ejecuta nunca. Está dentro del 'switch' como última operación; pero como todos los 'case' tienen un 'break' siempre se sale afuera del paquete de operaciones 'switch' y nunca pasa por ahí el proceso del programa. Si se quiere que el programa se pare en el 'case 3:' hay que colocar el 'return 0' ahí, dentro del 'case 3:' en lugar del 'break'.

En el 'case 1:' se declara la variable 'resp' y se le asigna un valor de cadena vacía. Después dentro del bucle 'do' no se le asigna ningún nuevo valor (no existe ninguna instrucción 'cin' ni ningún 'resp ='), con lo cual al llegar al final del bucle en 'while' nunca se cumple la condición ya que nunca es resp == 'S' ni tampoco resp == 's'... siempre es resp == cadena vacía; con lo que se sale del bucle y nunca se vuelve al 'do'.

La tercera comparación de los triángulos no es correcta me parece, se ha repetido la compración de los lados 1 y 2 y falta la del lado1 con el lado 3:
"else if (l1!=l2&&l1!=l2&&l2!=l3)"
Pero es que además es innecesaria, un triángulo sólo puede ser equilátero, isósceles o escaleno, por lo que si no es de ninguna de las dos primeras clases por fuerza es de la tercera y ya no hace falta el 'if'. Simplemente 'else' ------> es escaleno.

No se han respetado las buenas normas de escritura de código C/C++: sangrado de líneas, alineación de llaves {, } de forma que se visualice bien la estructura del programa sin tener que buscar qué parte se corresponde con qué otra parte,...

Es norma del foro poner las secuencias de código entre etiquetas, para ello tienes entre las opciones para el texto del mensaje el pequeño menú desplegable 'Código GeSHi'. Al exponer tu código en un mensaje selecciónalo, despliega el menú y dále una opción de lenguaje, igual que harías si quisieses poner negrita, color de letra, tamaño, etc.