当我尝试编译包含线性搜索功能声明的c文件时,这个错误出现在我身上
bool search(int value, int values[], int n)
{
// TODO: implement a searching algorithm
for(int d = 0;d<n;d++){
if(n<0){
return false;
}
else if(values[d]==value){
return true;
}
else{
return false;
}
}
}
我的代码出了什么问题?请帮忙。
答案 0 :(得分:2)
代码存在一些问题:
n = negative number or 0
int values[] = { 1, 2, 3, 4, 5 };
进行测试并搜索3
,您的代码将找不到此值。如果您要搜索特定值,则代码为:
bool search(int value, int values[], int n) {
for (int d = 0; d < n; d++) {
if (values[d] == value) {
return true;
}
}
return false;
}
答案 1 :(得分:1)
问题是传递给函数的参数是n <= 0
。循环永远不会执行,函数完成后不返回任何值。
要解决此问题,请将if(n <= 0)
语句放在for
循环之前。
答案 2 :(得分:0)
如果&#39; for&#39;循环没有做任何你赢得的迭代,并且能够从函数中返回任何东西。也许添加像
这样的边缘情况if(n <=0 )
return false;
在循环之前。
答案 3 :(得分:0)
d
在for
循环中递增,直到它等于n
的值。此时,执行for
循环之外的代码。
由于for
循环之外没有指令,该函数返回给调用者。发生error
是由于在这种情况下没有从函数返回的(布尔值)。
遵循Mahonri List Of Rules For Writing Maintainable C Code的规则#1可以避免错误。例如:
bool search(int value, int values[], int n)
{
bool rCode=false;
// TODO: implement a searching algorithm
for(int d = 0;d<n;d++)
{
if(n<0)
{
goto CLEANUP;
}
else if(values[d]==value)
{
rCode=true;
goto CLEANUP;
}
else
{
goto CLEANUP;
}
}
CLEANUP:
return(rCode);
}