Validación para que el programa solo permita ingreso de numeros (C++)

Denunciar
Publicaciones
1
Fecha de inscripción
jueves, 5 de septiembre de 2019
Estatus
Miembro
Última intervención
jueves, 5 de septiembre de 2019
-
misterdekus
Publicaciones
240
Fecha de inscripción
miércoles, 10 de enero de 2018
Estatus
Miembro
Última intervención
sábado, 14 de diciembre de 2019
-
Hola, alguien podría ayudarme con mi programa. Tengo mi programa que es de un restaurante en el que tienes que ingresar lo que comerás para almuerzo, bebida y postre. El programa te da las cantidades y precios tipo factura, todo bien por ahí, el problema es que necesito que cuando ingrese cualquier carácter que no sea un numero el programa te permita volver a seleccionar la opción correcta para cada opción. Si alguien podría ayudarme con esto se lo agradecería mucho.

#include <iostream>
using namespace std;

const float torta=20000;
const float helado=15000;
const float oferta_postre=8000;
const float sopa=15000;
const float arroz_pollo=25000;
const float pasta_bolona=35000;
const float oferta_almuerzo=15000;
const float jarra_jugo=15000;
const float vaso_jugo=5000;
const float jarra_agua=10000;
const float vaso_agua=3000;
float total = 0;
int continuar = 0;
int acum_op1 = 0;
int acum_op2 = 0;
int acum_op3 = 0;
int acum_op4 = 0;
int acum_op5 = 0;
int acum_op6 = 0;
int acum_op7 = 0;
int acum_op8 = 0;
int acum_op9 = 0;
int acum_op10 = 0;
int acum_op11 = 0;
int opcion=0;

void pedido(int op){
int cantidad = 0;
cout<<"Ingrese la cantidad a pedir: "<<endl;
cin>>cantidad;
switch(op)
{
case 1:
total = total + (sopa * cantidad);
acum_op1 = acum_op1 + cantidad;
break;
case 2:
total = total + (arroz_pollo * cantidad);
acum_op2 = acum_op2 + cantidad;
break;
case 3:
total = total + (pasta_bolona * cantidad);
acum_op3 = acum_op3 + cantidad;
break;
case 4:
total = total + (oferta_almuerzo * cantidad);
acum_op4 = acum_op4 + cantidad;
break;
case 5:
total = total + (jarra_jugo * cantidad);
acum_op5 = acum_op5 + cantidad;
break;
case 6:
total = total + (vaso_jugo * cantidad);
acum_op6 = acum_op6 + cantidad;
break;
case 7:
total = total + (jarra_agua * cantidad);
acum_op7 = acum_op7 + cantidad;
break;
case 8:
total = total + (vaso_agua * cantidad);
acum_op8 = acum_op8 + cantidad;
break;
case 9:
total = total + (torta * cantidad);
acum_op9 = acum_op9 + cantidad;
break;
case 10:
total = total + (helado * cantidad);
acum_op10 = acum_op10 + cantidad;
break;
case 11:
total = total + (oferta_postre * cantidad);
acum_op11 = acum_op11 + cantidad;
break;
default:
cout<<"Ingreso una opción invalida"<<endl;
break;
}
}

void submenu(int op){
int plato = 0;
if(op == 1)
{
cout <<"En el almuerzo hay: "<<endl<<endl;
cout <<"1) Sopa = 15000 "<<endl;
cout <<"2) Arroz con Pollo = 25000 "<<endl;
cout <<"3) Pasta Boloñesa = 35000 "<<endl;
cout <<"4) OFERTA Especial = 15000 (1 bebida y Arroz con Salsa) "<<endl<<endl;
cin>>plato;
if(plato >= 1 && plato <= 4){
pedido(plato);
}
else{
cout<<"Ingreso una opción invalida"<<endl;
submenu(op);
}
}
else if(op == 2)
{
cout <<"De bebida tenemos: "<<endl<<endl;
cout <<"5) Jarra de Jugo = 15000 "<<endl;
cout <<"6) Vaso de Jugo = 5000 "<<endl;
cout <<"7) Jarra de Agua = 10000 "<<endl;
cout <<"8) Vaso de Agua = 3000 "<<endl;
cin>>plato;
if(plato >= 5 && plato <= 8){
pedido(plato);
}
else{
cout<<"Ingreso una opción invalida"<<endl;
submenu(op);
}
}
else{
cout <<" De postre hay: "<<endl<<endl;
cout <<"9)torta = 20000 "<<endl;
cout <<"10)helado = 15000 "<<endl;
cout <<"11)OFERTA ESPECIAL = 8000 (1 cafe y galletas dulces) "<<endl<<endl;
cin>>plato;
if(plato >= 9 && plato <= 11){
pedido(plato);
}
else{
cout<<"Ingreso una opción invalida"<<endl;
submenu(op);
}
}
}


void menu(){
cout<<"1) Almuerzo"<<endl;
cout<<"2) Bebida"<<endl;
cout<<"3) Postre"<<endl;
cin>>opcion;

switch(opcion){
case 1:
submenu(1);
break;
case 2:
submenu(2);
break;
case 3:
submenu(3);
break;
default:
cout<<"Ingreso una opción invalida"<<endl;
menu();
break;
}
while(continuar != 1 and continuar != 2){
cout<<"¿Desea pedir algo más? Si=1;No=2"<<endl;
cin>>continuar;
}
if(continuar==1){
continuar=0;
menu();
}
else{
cout<<"\n*** PEDIDO *** "<<endl<<endl;

if(acum_op1 >0 ){
cout<<acum_op1<<" Sopa"<<endl<<endl;
}
if(acum_op2 >0 ){
cout<<acum_op2<<" Arroz con Pollo"<<endl<<endl;
}
if(acum_op3 >0 ){
cout<<acum_op3<<" Pasta Boloñesa"<<endl<<endl;
}
if(acum_op4 >0 ){
cout<<acum_op4<<" OFERTA Especial (1 bebida y Arroz con Salsa)"<<endl<<endl;
}
if(acum_op5 >0 ){
cout<<acum_op5<<" Jarra de Jugo"<<endl<<endl;
}
if(acum_op6 >0 ){
cout<<acum_op6<<" Vaso de Jugo"<<endl<<endl;
}
if(acum_op7 >0 ){
cout<<acum_op7<<" Jarra de Agua"<<endl<<endl;
}
if(acum_op8 >0 ){
cout<<acum_op8<<" Vaso de Agua"<<endl<<endl;
}
if(acum_op9 >0 ){
cout<<acum_op9<<" Torta"<<endl<<endl;
}
if(acum_op10 >0 ){
cout<<acum_op10<<" Helado"<<endl<<endl;
}
if(acum_op11 >0 ){
cout<<acum_op11<<" OFERTA ESPECIAL (1 cafe y galletas dulces)"<<endl<<endl;
}
cout<<"Total a Pagar: "<<total<<endl<<endl;
}
}

int main(int argc, char *argv[]) {
cout<<"*** BIENVENIDOS AL RESTAURANTE BONIN ***"<<endl<<endl<<endl;
cout<<" ** ¿ QUE DESEA ORDENAR ? ** "<<endl<<endl;
menu();
return 0;

2 respuestas

Publicaciones
240
Fecha de inscripción
miércoles, 10 de enero de 2018
Estatus
Miembro
Última intervención
sábado, 14 de diciembre de 2019
21
Hola Jorge

la unica solución rapida ( que se me viene a la mente ) es que cambies el tipo int a tipo char ... aunque eso significaría que tendrias que poner lo que antes era numero a caracter

y solo para las variables que usen numero uses un cast o un parse/convert de char a int

observacion importante : el submenu lo pudiste tambien manejado con un Switch ...

para que lo consideres

Saludos