cin y getline saltando entrada [duplicado]
Esta pregunta ya tiene una respuesta aquí:
¿Por qué std :: getline () omite la entrada después de una extracción formateada? 3 respuestasAnteriormente publiqué una pregunta sobrecin
omitiendo la entrada, y obtuve resultados para vaciar y usaristringstream
, pero ahora probé todas las soluciones posibles pero ninguna de ellas funciona.
Aquí está mi código:
void createNewCustomer () {
string name, address;
cout << "Creating a new customer..." << endl;
cout << "Enter the customer's name: "; getline(cin, name);
cout << "Enter the customer's address: "; getline(cin, address);
Customer c(name, address, 0);
CustomerDB::addCustomer(c);
cout << endl;
}
pero sigo obteniendo lo mismo, omitiendo entradas, y cuando las recibe, las toma y almacena en el nombre vacío nada, y en la dirección toma lo que escribí en el nombre, pero desde la segunda letra hasta el final
¿Qué está mal con mi código?
Probé elcin.ignore()
, cin.get()
ycin.clear()
Todos juntos y solos, ninguno de ellos trabajó.
EDITAR:
El método principal en main.cpp invocamainMenu()
solamente
void mainMenu () {
char choice;
do {
system("cls");
mainMenuDisplay();
cin >> choice;
system("cls");
switch (choice) {
case '1':
customerMenu();
break;
case '2':
dvdMenu();
break;
case '3':
receiptMenu();
break;
case '4':
outro();
break;
default:
cout << '\a';
}
cin.ignore();
cin.get();
} while (choice != '4');
}
Elegiré 1 para el ejemplo del cliente, esto escustomerMenu()
void customerMenu () {
char choice;
do {
system("cls");
manageCustomerMenu();
cin >> choice;
system("cls");
switch (choice) {
case '1':
createNewCustomer();
break;
case '2':
deleteCustomer();
break;
case '3':
updateCustomerStatus();
break;
case '4':
viewCustomersList();
break;
case '5':
mainMenu();
break;
default:
cout << '\a';
}
cin.ignore();
cin.get();
} while (choice != '5');
}
Elijo nuevamente 1 para crear un nuevo objeto de cliente, que ahora irá a MainFunctions.cpp que invocará la funcióncreateNewCustomer()
que es el primero.
void createNewCustomer () {
string name, address;
cout << "Creating a new customer..." << endl;
cout << "Enter the customer's name: "; cin.getline(name,256);
cout << "Enter the customer's address: "; cin.getline(address,256);
Customer c(name, address, 0);
CustomerDB::addCustomer(c);
cout << endl;
}