int main() { int account_or_not; account obj; menu menu_obj; cout << "Do you have an account? 1 for yes or 2 for no " << endl; cin >> account_or_not; if (account_or_not == 1) { menu_obj.user_menu(); } else if (account_or_not == 2) { obj.create_account(); } else { cout << "You entered a value other than 1 or 2 please try again "<< endl; cin >> account_or_not; } return 0; }Esto es lo que está en la parte principal de mi código, y no estoy seguro de si estoy siendo tonto, pero probé un caso de cambio y si no y en el otro (o por defecto para el cambio) cuando verifico lo que el usuario ha ingresado fue mal y pedirles que lo ingresen nuevamente, el programa finaliza cuando ingresan el valor correcto. Por ejemplo, si se ingresa 3, le dirá al usuario que intente nuevamente, luego, cuando se ingresa 1 o 2, el programa finaliza. Cualquier idea, gracias de antemano.
Vayamos en pequeños pasos. Primero, pidamos al usuario solo una vez que corrija su entrada y supongamos además que el usuario debe hacerlo bien en el segundo intento. Primero debe verificar la entrada válida y luego usarla, no al revés:
cin >> account_or_not; if (account_or_not != 1 && account_or_not != 2) { cout << "You entered a value other than 1 or 2 please try again "<< endl; cin >> account_or_not; } // assume input is now valid... if (account_or_not == 1) { menu_obj.user_menu(); } else if (account_or_not == 2) { obj.create_account(); }Esto solo solicitará una entrada corregida una vez. Si desea seguir preguntando hasta que el usuario ingresó la entrada correcta, puede usar un bucle:
cin >> account_or_not; while (account_or_not != 1 && account_or_not != 2) { cout << "You entered a value other than 1 or 2 please try again "<< endl; cin >> account_or_not; } // assume input is now valid... if (account_or_not == 1) { menu_obj.user_menu(); } else if (account_or_not == 2) { obj.create_account(); } Ahora, esto solicita una entrada válida repetidamente hasta que el usuario ingrese 1 o 2 . Sin embargo, no maneja correctamente el caso de que el usuario ingrese foo o user input is the worst that can happen to a program . Si la entrada del usuario no se puede analizar como un int , entonces std::cin se encuentra en un estado de error del que debe recuperarse antes de seguir leyendo. Dije que quiero dar pequeños pasos, y no tengo que repetir lo que se ha escrito en otro lugar, así que lo remito a estas preguntas y respuestas para leer más: Buen ciclo de validación de entrada usando cin - C++ .
A continuación se muestra un ejemplo de trabajo usando while loop. Si el usuario ingresa 1 o 2, haga algún trabajo en el bloque de condición respectivo y luego break del ciclo while. Por otro lado, si el usuario ingresa 3, pídale que ingrese nuevamente.
#include<iostream> int main() { int account_or_not; //account obj; //menu menu_obj; std::cout << "Do you have an account? 1 for yes or 2 for no " << std::endl; std::cin >> account_or_not; while(true) { if (account_or_not == 1) { // menu_obj.user_menu(); std::cout<<"inside 1"<<std::endl; //do something and then break break; } else if (account_or_not == 2) { //obj.create_account(); std::cout<<"inside 2"<<std::endl; //do something and then break break; } else { std::cout << "You entered a value other than 1 or 2 please try again "<< std::endl; std::cin >> account_or_not; } } return 0; }Esto hace lo que quieres. Pruébelo con diferentes entradas como 1,2 o 3.