Tengo un proyecto de la escuela el cual es una calculadora con varias opciones, ya están todas programadas, el único problema que tengo es que al ingresar una letra se crea un bucle infinito y ya no puedo hacer nada, llevo intentando arreglarlo demasiado tiempo pero simplemente ya no se que hacer, me bloquee por completo, por favor alguien ayúdeme.
El código es el siguiente:
#include <iostream>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main() {
float numero1, numero2;
int potencia, base;
int opcion;
int n;
long double factorial(int);
char cadena[63];
unsigned long long int decimal = 0;
int bas;
int tabla=0 or 1, tabla1=0 or 1;
do {
etiqueta_1:
system ("color 0D");
system("cls");
cout << "BIENVENIDO AL PROGRAMA DE CALCULADORA" << endl;
cout << "MENU PRINCIPAL" << endl;
cout << "1. Operaciones aritmeticas" << endl;
cout << "2. Factorial" << endl;
cout << "3. Conversor entre bases" << endl;
cout << "4. Tabla de verdad" << endl;
cout << "5. Salir" << endl;
cout << "Elija una opcion" << endl;
cin >> opcion;
switch(opcion){
case 1:
system ("color 01");
do{
system("cls");
cout << "MENU DE OPERACIONES ARITMETICAS" << endl;
cout << "1. Suma" << endl;
cout << "2. Resta" << endl;
cout << "3. Multiplicacion" << endl;
cout << "4. Division" << endl;
cout << "5. Potencia" << endl;
cout << "6. Volver al menu principal" << endl;
cout << "7. Salir" << endl;
cout << "Elija una opcion" << endl;
cin >> opcion;
system("cls");
if(opcion >= 1 && opcion <=4)
{
cout << "Ingrese el numero 1:" << endl;
cin >> numero1;
cout << "Ingrese el numero 2:" << endl;
cin >> numero2;
switch(opcion){
case 1:
cout << "La suma es: " << numero1 + numero2 << endl << endl;
break;
case 2:
cout << "La resta es: " << numero1 - numero2 << endl << endl;
break;
case 3:
cout << "La multiplicacion es: " << numero1 * numero2 << endl << endl;
break;
case 4:
cout << "La division es: " << numero1 / numero2 << endl << endl;
break;
}
}
else if (opcion == 5){
cout << "Introduce la base: " << endl;
cin >> base;
cout << "Introduce la potencia: " << endl;
cin >> potencia;
cout << "El resultado es: " << pow(base,potencia) << endl << endl;
}
if (opcion == 6){
goto etiqueta_1;
}
if(opcion != 7){
cout << "Presione cualquier tecla para volver al menu de operaciones aritmeticas." << endl;
getchar(); getchar();
}
}
while(opcion != 7);
return 0;
case 2:
system ("color 02");
do{
system("cls");
cout << "MENU DE FACTORIAL" << endl;
cout << "1. Factorial" << endl;
cout << "2. volver al menu principal" << endl;
cout << "3. Salir" << endl;
cout << "Elija una opcion" << endl;
cin >> opcion;
system("cls");
if(opcion == 1)
{
cout << "Introduzca numero: ";
cin >> n;
cout << "Factorial: " << factorial(n) << endl;
system("pause");
}
if (opcion == 2){
goto etiqueta_1;
}
if(opcion != 3){
cout << "Presione cualquier tecla para volver al menu de factorial." << endl;
getchar(); getchar();
}
}while(opcion != 3);
return 0;
case 3:
system ("color 03");
do{
system("cls");
cout << "MENU DE CONVERTIDOR DE BASES" << endl;
cout << "1. Binario" << endl;
cout << "2. Octal" << endl;
cout << "3. Hexadecimal" << endl;
cout << "4. volver al menu principal" << endl;
cout << "5. Salir" << endl;
cout << "Elija una opcion" << endl;
cin >> opcion;
system("cls");
if(opcion >= 1 && opcion <=3)
{
cout << "Ingresa un numero decimal: " << endl;
cin >> decimal;
switch(opcion){
case 1:
ltoa(decimal, cadena, 2);
cout << "El numero en base binaria es:" << (2, cadena) << endl;
break;
case 2:
ltoa(decimal, cadena, 8);
cout << "El numero en base octal es:" << (8, cadena) << endl;
break;
case 3:
ltoa(decimal, cadena, 16);
cout << "El numero en base hexadecimal es:" << (16, cadena) << endl;
break;
}
}
if (opcion == 4){
goto etiqueta_1;
}
if(opcion != 5){
cout << "Presione cualquier tecla para volver al menu de convertidor de bases." << endl;
getchar(); getchar();
}
}while(opcion != 5);
return 0;
case 4:
system ("color 04");
do{
system("cls");
cout << "MENU DE OPERADORES LOGICOS" << endl;
cout << "1. AND" << endl;
cout << "2. OR" << endl;
cout << "3. XOR" << endl;
cout << "4. NOT" << endl;
cout << "5. Volver al menu principal " << endl;
cout << "6. Salir" << endl;
cout << "Elija una opcion" << endl;
cin >> opcion;
system("cls");
if(opcion >= 1 && opcion <=3)
{
cout << "Inserte el valor de A (solo 0 o 1): " << endl;
cin >> tabla;
cout << "Inserte el valor de B (solo 0 o 1): " << endl;
cin >> tabla1;
switch(opcion){
case 1:
if(tabla == 0 && tabla1 ==0)
{
cout << "Su salida es: 0" << endl;
}
else if (tabla == 1 && tabla1 == 0)
{
cout << "Su salida es: 0" << endl;
}
else if (tabla == 0 && tabla1 == 1)
{
cout << "Su salida es: 0" << endl;
}
else if (tabla == 1 && tabla1 == 1)
{
cout << "Su salida es: 1" << endl;
}
break;
case 2:
if(tabla == 0 && tabla1 ==0)
{
cout << "Su salida es: 0" << endl;
}
else if (tabla == 1 && tabla1 == 0)
{
cout << "Su salida es: 1" << endl;
}
else if (tabla == 0 && tabla1 == 1)
{
cout << "Su salida es: 1" << endl;
}
else if (tabla == 1 && tabla1 == 1)
{
cout << "Su salida es: 1" << endl;
}
break;
case 3:
if(tabla == 0 && tabla1 ==0)
{
cout << "Su salida es: 0" << endl;
}
else if (tabla == 1 && tabla1 == 0)
{
cout << "Su salida es: 1" << endl;
}
else if (tabla == 0 && tabla1 == 1)
{
cout << "Su salida es: 1" << endl;
}
else if (tabla == 1 && tabla1 == 1)
{
cout << "Su salida es: 0" << endl;
}
break;
}
}
else if (opcion == 4){
cout << "Introduce el valor de A (solo 0 o 1): " << endl;
cin >> tabla;
if(tabla == 0 )
{
cout << "Su salida es: 0" << endl;
}
else if (tabla == 1 )
{
cout << "Su salida es: 1" << endl;
}
}
if (opcion == 5){
goto etiqueta_1;
}
if(opcion != 6){
cout << "Presione cualquier tecla para volver al menu de operadores logicos." << endl;
getchar(); getchar();
}
}while(opcion != 6);
return 0;
}
}
while(opcion != 5);
}
long double factorial(int n)
{
long double fact;
if (n==0)
return 1;
else
return n*factorial(n-1);
}
De antemano muchas gracias.