C++ 递归函数不返回指定的值
我试图调试一个递归函数,该函数用于验证用户输入,并在输入正常时返回一个值。函数如下所示:C++ 递归函数不返回指定的值,c++,recursion,C++,Recursion,我试图调试一个递归函数,该函数用于验证用户输入,并在输入正常时返回一个值。函数如下所示: double load_price() { double price; Goods * tempGd = new Goods(); cin >> price; while (!cin) { cin.clear(); #undef max std::cin.ignore(std::numeric_limits<st
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;
}
}
我试着把问题画在纸上,但我所有的图表看起来都和我的函数一样。我认为退货有一些问题,但我不知道在哪里
非常感谢您的帮助。您没有使用递归调用的返回值。您需要执行以下操作:
return load_price();
谁说服你用递归解决这个问题的
#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;
}
}
#未定义最大值
双负载价格()
{
对于(;;){
双倍价格;
cin>>价格;
如果(!cin)
{
cin.clear();
std::cin.ignore(std::numeric_limits::max(),'\n');
你认为load\u price()的递归结果在哪里
将要运行吗?不要,我重复一遍,不要,在这里使用指针和new
。这完全没有意义,它实际上会在代码中引入内存泄漏。@我真的不知道,它似乎埋在函数本身的某个地方。@KonradRudolph感谢提示,m8,用堆栈对象。@WhozCraig:正确答案是:无处可寻。我的返回价格应该被上述代码替换吗,Barmar?@OndřejŠimon不,你所有的递归调用都应该被替换。@Giraffe船长哦,我明白了,将递归调用load_price()替换为return load_price();正如Barmar推荐的那样有效。谢谢你们,伙计们。谢谢你们的迭代解决方案。老实说,我一直在努力寻找一个,但无法解决它。如果你们不介意的话,我会用你们的。我真的不喜欢递归,只是无法找到迭代解决方案。当然,请随意使用。如果我不喜欢,我不会在这里发布任何东西希望人们使用它。再次感谢你,汉斯。我用你的模板改变了我的其他两个递归方法,我用来检查插入的ID和货物数量的方法。
#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;
}
}