La función recursiva no devuelve el valor especificado
Estoy intentando depurar una función recursiva utilizada para validar la entrada del usuario y devolver un valor cuando la entrada es correcta. La función se ve así:
double load_price()
{
double price;
Goods * tempGd = new Goods();
cin >> price;
while (!cin)
{
cin.clear();
#undef max
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
cout << endl;
cout << "You didn't enter a number. Do so, please: ";
cin >> price;
} // endwhile
if (!tempGd->set_price(price))
{
cout << endl;
cout << "The price " << red << "must not" << white << " be negative." << endl;
cout << "Please, insert a new price: ";
load_price();
}
else
{
delete tempGd;
return price;
}
}
El método set_price() de la clase Goods tiene el siguiente aspecto
bool Goods::set_price(double price)
{
if (price> 0)
{
priceSingle_ = price;
priceTotal_ = price* amount_;
return true;
}
return false;
}
Intenté dibujar el problema en un papel, pero todos mis diagramas parecen tener el aspecto que ya tiene mi función. Creo que hay algunos problemas con las devoluciones, pero no sé dónde.
La ayuda sería muy apreciada.
Aceptado
No estás utilizando el valor de retorno de la llamada recursiva. Necesitas hacer:
return load_price();
¿Quién te convenció de utilizar la recursividad para ese problema?
#undef max
double load_price()
{
for(;;) {
double price;
cin >> price;
if (!cin)
{
cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
cout << endl;
cout << "You didn't enter a number. Do so, please: ";
continue;
}
if (!Goods().set_price(price))
{
cout << endl;
cout << "The price " << red << "must not" << white << " be negative." << endl;
cout << "Please, insert a new price: ";
continue;
}
return price;
}
}