2014-09-04 35 views
-1

似乎我这个错误的结束,当我试图编译其中包含一个线性搜索功能错误:控制可以达到非void函数

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

什么是错我的代码的声明的C文件?请帮忙。

+0

看到我的回答,他们是代码中的一些其他问题。 – NetVipeC 2014-09-04 15:55:29

回答

2

的代码一些问题:

  1. 的方法已经不返回任何东西,作为评论的路径,当参数n = negative number or 0
  2. for循环没有做任何事情,只会执行一次和退出的条件之一。只有当第一个元素是被搜索的元素时,它才会正常工作,在任何其他情况下只检查第一个元素并返回(没有存在或不存在的正确信息)。使用数组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; 
} 
+0

如果我有其他条件做另一个循环? – user297904 2014-09-04 16:08:04

+0

'if-else'会总是执行两个分支中的一个,并且您的代码会在两个分支中返回,在这种情况下,您总是会在循环的第一次执行中返回该函数(某些编译器会警告此问题,铿锵)。 – NetVipeC 2014-09-04 16:10:43

+0

非常感谢:D。 – user297904 2014-09-04 16:13:23

1

问题是传递给函数的参数n是n <= 0。循环从不执行,函数完成而不返回任何值。

要修复它,请在for循环之前放置if(n <= 0)语句。

+0

所以我应该改变如果条件是(n <= 0){...} ??? – user297904 2014-09-04 15:40:33

+0

@ user297904是的。固定。 – Igor 2014-09-04 15:43:37

+0

好的,谢谢它的工作原理:D – user297904 2014-09-04 15:44:40

0

如果'for'循环没有做任何迭代,你将无法从函数中返回任何东西。也许增加一个边缘案例,如

if(n <=0) 
    return false; 

之前的循环。

0

dfor循环递增,直到它等于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); 
    } 
相关问题