二叉搜索给我错误,说强制值为布尔值"真"或"假"

Binary search giving me error saying forcing value to bool 'true' or 'false'

本文关键字:布尔值 搜索 错误      更新时间:2023-10-16

我的程序是完整的,我得到的唯一错误是从我的二进制搜索和我的线性搜索。它们是相同的错误,所以我只发布一个。

bool searchByDescriptionBinary(char desc[][DESC_SIZE],
                             const int NUM_ROWS,
                             char searchValue[DESC_SIZE],
                             int& foundPosition)
 {
 int first = 0,
     last = NUM_ROWS - 1,
     middle,
     position = -1;
 bool found = false;
 while (!found && first <= last)
 {
     middle = (first + last) / 2;
     if (desc[middle] == searchValue)
     {
         found = true;
         position = middle;
     }
     else if (desc[middle] > searchValue)
         last = middle - 1;
     else
         first = middle + 1;
 }
 return position;
 }

您的函数定义为bool作为返回类型,但它返回int(以末尾的return position语句的形式)。这是一个输入错误。改变一种或另一种类型,直到他们同意,它应该编译。

您的函数定义为返回bool,但您试图返回position,它被声明为int

您想返回found(它将是truefalse),如果found == true设置foundPosition = position .

首先,您不太可能得到您所说的错误。问题的根源在于,您试图从声明的函数返回boolreturn position(其中positionint)。你这么做是想干什么?为什么您试图从bool函数返回int ?

在任何情况下,这都是合法的,这意味着int将按照c++语言的布尔转换规则隐式地转换为bool。在这种情况下,有些编译器会发出警告,但不会发出错误。无论如何,这肯定不是你想要的。

其次,从函数声明中可以明显看出,您打算通过foundPosition参数(声明为int &)返回索引。函数末尾的return语句显然应该执行return found,而不是return position。然而在你的代码中,你完全忽略了foundPosition的存在。为什么?为什么你试图return的位置,而不是通过foundPosition参数发送它,因为最初的意图?这是你的代码吗?

第三(正如@Blastfurnace已经在评论中指出的),你的==>比较并没有做你认为他们在做的事情。不能使用内置的比较操作符比较c风格的字符串。你必须使用strcmp

您应该return found;而不是return postion;