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,并忽略数组中的其他条目,尽管它们也匹配。
答案 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;
}