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;
   }
}