程序不会进入IF条件。涉及结构

时间:2016-02-29 05:56:31

标签: c++ visual-studio if-statement visual-c++ struct

    BBQ findBBQ(string date)
    {
          for (int i = 0; i < 3; i++)
          {
              for (int j = 0; j < SIZE; j++)
              {
                  if (pits[i][j].cal_date == date)
                  {
                      cout << "Avail" << endl;
                      return pits[i][j];
                  }
                  else
                  {
                      cout << "Unavail" << endl;
                      return pits[i][j];
                  }
              }
          }
     }

我的问题在于IF条件。我正在尝试输入日期,并让程序运行我已初始化的日期数组并打印,如果有这样的日期可用。由于某种原因,程序只有在找到匹配项时才会为数组中的第一个条目输入IF,并忽略数组中的其他条目,尽管它们也匹配。

3 个答案:

答案 0 :(得分:0)

BBQ findBBQ(string date)
{
      for (int i = 0; i < 3; i++)
      {
          for (int j = 0; j < SIZE; j++)
          {
              if (pits[i][j].cal_date == date)
              {
                  cout << "Avail" << endl;
                  return pits[i][j];
              }


              // Error in logic.
              // If the date of the first item does not match the
              // input date, you enter the else block and return 
              // right away. This block needs to be moved. 
              else
              {
                  cout << "Unavail" << endl;
                  return pits[i][j];
              }
          }
      }
 }

修正:

BBQ findBBQ(string date)
{
      for (int i = 0; i < 3; i++)
      {
          for (int j = 0; j < SIZE; j++)
          {
              if (pits[i][j].cal_date == date)
              {
                  cout << "Avail" << endl;
                  return pits[i][j];
              }
          }
      }

      cout << "Unavail" << endl;
      return <<<something that represents not found>>>;
 }

答案 1 :(得分:0)

看起来你并没有真正超越日期数组中的第一个位置。你可能想要更像这样的东西

BBQ* findBBQ(string date)
{
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < SIZE; j++)
        {
            if (pits[i][j].cal_date == date)
            {
                cout << "Avail" << endl;
                return &pits[i][j];
            }
        }
    }

    cout << "Unavail" << endl;
    return NULL;
}

顺便说一下,我已经改变了你的方法签名来返回一个指针。你没有在上面的代码中使用结果,所以也许它并不重要,但是指针的开销要比复制副本的开销少。

答案 2 :(得分:0)

问题与你的功能有关:无论你是否发现都会返回,所以你的逻辑在else语句中不正确。您没有跟踪列表的每个元素。最快的解决方案就是:

BBQ findBBQ(string date)
    {
          for (int i = 0; i < 3; i++)
          {
              for (int j = 0; j < SIZE; j++)
              {
                  if (pits[i][j].cal_date == date)
                  {
                      cout << "Avail" << endl;
                      return pits[i][j];
                  }
                  else
                  {
                      cout << "Unavail" << endl;
                     // return pits[i][j];
                  }
              }
          }
     }

但为什么你需要在这个功能中返回烧烤?此外,您每月打印3“Avail”或“UnAvail”。也许你可以这样做:

void findBBQ(string date)
{
      for (int i = 0; i < 3; i++)
      {
          for (int j = 0; j < SIZE; j++)
          {
              if (pits[i][j].cal_date == date)
              {
                  cout << "Avail" << endl;
                  return;
              }
          }
      }
      cout << "Unavail" << endl;
 }