Hola a todos
Deseo que tengan un buen día, hoy estoy en busca de ayuda con un programa que estoy realizando en c++ (lo compilo con el programa Dev-C++) en fin, en visto alguno temas (la verdad pocos) sobre el bucle que se produce al ingresar un carácter en una variable, no se si me explique bien, el programa en general es una calculadora de operaciones básicas con fracciones, la condición es que en el menú del programa no acepte caracteres ni otras opciones que no aparezcan en el listado del menú. Pude ver en otro tema del foro la misma pregunta pero la verdad no entendí, espero me puedan ayudar, aquí dejo el código.
#include<iostream>
#include<math.h>
#include<conio.h>
#include<locale.h>
using namespace std;
int main()
{
setlocale(LC_CTYPE, "Spanish");
int opc;
float n1,d1,n2,d2,sum1,sum2,res1,res2,mul1,mul2,div1,div2,ans;
do{
system("cls"); //Funcion para limpiar la pantalla//
//Menú Principal//
cout<<"\t\t\t\tBIENVENIDO\n";
cout<<"\n¿Qué operación desea hacer?\n";
cout<<"\n1. Suma\n";
cout<<"2. Resta\n";
cout<<"3. Multiplicación\n";
cout<<"4. División\n";
cout<<"5. Salir\n\n";
cout<<"Elija una opción: ";cin>>opc;
system("cls");
switch(opc)
{
case 1:
cout<<"\nIntroduzca el valor del numerador de la primer fracción:\n";cin>>n1;
cout<<"Introduzca el valor del denominador de la primer fracción:\n";cin>>d1;
cout<<"Introduzca el valor del numerador de la segunda fracción:\n";cin>>n2;
cout<<"Introduzca el valor del denominador de la segunda fracción:\n";cin>>d2;
system("cls");
cout<<"El resultado de ";
cout<<n1;
cout<<"/";
cout<<d1;
cout<<" + ";
cout<<n2;
cout<<"/";
cout<<d2;
cout<<" es:\n";
if (d1 == d2){
sum1 = (n1 + n2);
cout<<"\nResultado en fracción:\n";
cout<<sum1<<"/"<<d1;
ans = sum1/d1;
cout<<"\n\nResultado de la división:\n";
cout<<ans;
cout<<"\n";
cout<<"Presione una tecla para volver al menu principal";
getch();
}
else if (d1 != d2){
sum1 = (n1*d2) + (d1*n2);
sum2 = d1*d2;
cout<<"\nResultado en fracción:\n";
cout<<sum1<<"/"<<sum2;
ans = sum1/sum2;
cout<<"\n\nResultado de la división:\n";
cout<<ans;
cout<<"\n";
cout<<"Presione una tecla para volver al menu principal";
getch();
}
break;
case 2:
cout<<"\nIntroduzca el valor del numerador de la primer fracción:\n";cin>>n1;
cout<<"Introduzca el valor del denominador de la primer fracción:\n";cin>>d1;
cout<<"Introduzca el valor del numerador de la segunda fracción:\n";cin>>n2;
cout<<"Introduzca el valor del denominador de la segunda fracción:\n";cin>>d2;
system("cls");
cout<<"El resultado de ";
cout<<n1;
cout<<"/";
cout<<d1;
cout<<" - ";
cout<<n2;
cout<<"/";
cout<<d2;
cout<<" es:\n";
if (d1 == d2){
res1 = (n1 - n2);
cout<<"\nResultado en fracción:\n";
cout<<res1<<"/"<<d1;
ans = res1/d1;
cout<<"\n\nResultado de la división:\n";
cout<<ans;
cout<<"\n";
cout<<"Presione una tecla para volver al menu principal";
getch();
}
else if (d1 != d2){
res1 = (n1*d2) - (d1*n2);
res2 = d1*d2;
cout<<"\nResultado en fracción:\n";
cout<<res1<<"/"<<res2;
ans = res1/res2;
cout<<"\n\nResultado de la división:\n";
cout<<ans;
cout<<"\n";
cout<<"Presione una tecla para volver al menu principal";
getch();
}
break;
case 3:
cout<<"\nIntroduzca el valor del numerador de la primer fracción:\n";cin>>n1;
cout<<"Introduzca el valor del denominador de la primer fracción:\n";cin>>d1;
cout<<"Introduzca el valor del numerador de la segunda fracción:\n";cin>>n2;
cout<<"Introduzca el valor del denominador de la segunda fracción:\n";cin>>d2;
system("cls");
cout<<"El resultado de ";
cout<<n1;
cout<<"/";
cout<<d1;
cout<<" * ";
cout<<n2;
cout<<"/";
cout<<d2;
cout<<" es:\n";
mul1 = n1*n2;
mul2 = d1*d2;
cout<<"\nResultado en fracción:\n";
cout<<mul1<<"/"<<mul2;
ans = mul1/mul2;
cout<<"\n\nResultado de la división:\n";
cout<<ans;
cout<<"\n";
cout<<"Presione una tecla para volver al menu principal";
getch();
break;
case 4:
cout<<"\nIntroduzca el valor del numerador de la primer fracción:\n";cin>>n1;
cout<<"Introduzca el valor del denominador de la primer fracción:\n";cin>>d1;
cout<<"Introduzca el valor del numerador de la segunda fracción:\n";cin>>n2;
cout<<"Introduzca el valor del denominador de la segunda fracción:\n";cin>>d2;
system("cls");
cout<<"El resultado de ";
cout<<n1;
cout<<"/";
cout<<d1;
cout<<" / ";
cout<<n2;
cout<<"/";
cout<<d2;
cout<<" es:\n";
div1 = n1*d2;
div2 = d1*n2;
cout<<"\nResultado en fracción:\n";
cout<<div1<<"/"<<div2;
ans = div1/div2;
cout<<"\n\nResultado de la división:\n";
cout<<ans;
cout<<"\n";
cout<<"Presione una tecla para volver al menu principal";
getch();
break;
case 5:
return 0;
break;
default:
cout<<"Opción Invalida\n";
system("pause");
}
}while (opc != 5);
}
· Los códigos deben ir en etiquetas GeSHi
· No se debe escribir en mayúsculas
· Los titulos deben ser descriptivos
>aquí las reglas del foro (http://foro.elhacker.net/reglas.htm)
-Engel Lex
Pon un ejemplos malo y qué es lo que esperas.
Cita de: MAFUS en 19 Febrero 2018, 01:26 AM
Pon un ejemplos malo y qué es lo que esperas.
Que dices?
podría en vez de salir del programa en el ultimo case retornarlo al menu con la opción goto
Mmm no te entiendo muy bien, me dices que modifique el último caso? Pero ese es para salír del programa
ahora q lo pienso puedes dejar el case 5 como la salida del programa y el default que retorne al menu algo así
switch (variable) {
case 2:
Console.WriteLine("variable is >= 2");
goto case 1;
case 1:
Console.WriteLine("variable is >= 1");
break;
}
Digo que pongas una captura de pantalla del programa fallando o hagas un copia-pega del terminal. Para saber qué ocurre.
Lo tenías hecho, solo te faltaba el bucle, he refactorizado tu código y añadido el bucle
#include <iostream>
#include <string>
#include <locale.h>
using namespace std;
void leerOpcion(unsigned short* opcion) {
cout
<< "Calculadora de fracciones" << endl << endl
<< "1. Suma" << endl
<< "2. Resta" << endl
<< "3. Multiplicación" << endl
<< "4. División" << endl
<< "0. Salir" << endl << endl
<< "Opción: ";
cin >> *opcion;
}
void leerFraccion(float* numerador, float* denominador) {
char separador;
while (separador != '/') {
cout << endl << "Fracción [numerador/denominador]: ";
cin >> *numerador >> separador >> *denominador;
if (separador != '/') {
cout << "[ERROR] Se esperaba '/' como separador";
}
}
}
int main() {
setlocale(LC_CTYPE, "Spanish");
unsigned short opcion;
float n1, d1, n2, d2, numerador, denominador;
do {
system("cls");
leerOpcion(&opcion);
if (opcion != 0) {
cin.get();
leerFraccion(&n1, &d1);
cin.get();
leerFraccion(&n2, &d2);
switch (opcion) {
case 1:
numerador = d1 == d2 ? n1 + n2 : d1 * d2 + d1 * n2;
denominador = d1 == d2 ? d1 : d1 * d2;
break;
case 2:
numerador = d1 == d2 ? n1 - n2 : n1 * d2 - d1 * n2;
denominador = d1 == d2 ? d1 : d1 * d2;
break;
case 3:
numerador = n1 * n2;
denominador = d1 * d2;
break;
case 4:
numerador = n1 * d2;
denominador = d1 * n2;
break;
}
cout
<< "Resultado: " << numerador << "/" << denominador << endl
<< "División: " << numerador / denominador << endl
<< "Pulse una tecla para continuar...";
cin.ignore();
cin.get();
}
} while (opcion != 0);
}
Te sugiero no utilices conio, un saludo!