2017-04-07 333 views
1

首先:我刚刚开始使用C编程(我的第一种编程语言),这可能是一个愚蠢/简单的问题,但我试图实现一个函数,该函数返回数组/列表中索引处的值。我总是从编译器中得到这个错误:“错误:编译器到达非void函数结束”,即使我返回的是int类型的值。在此先感谢:C - 在索引处的返回值:控制达到非void函数的末尾

int list_get(int list[], int length, int index) { 
    if(index <= CAPACITY){ 
    for(int i = 0; i <= CAPACITY; i++){ 
     if(i == index) 
      return list[i]; 
    } 
    } 
    else{ 
    printf("Index is out of range. \n"); 
    return 0; 
    } 
} 
+3

在for循环之后需要'return 0;'。 – BLUEPIXY

+0

或者不使用'if if(0 <= index && index BLUEPIXY

+0

'list [i]'我以前的评论错字为'list [index]' – BLUEPIXY

回答

3

编译器看到,无论是return陈述是某种条件块的,所以它会试图向您发出警告。没有错,正如这样。

考虑流量,

  • index <= CAPACITY是真实的,
  • 为没有重复的,i == index是真实的。
  • for循环退出。

在这种情况下,没有什么要返回....

避免的,只要将return 0;声明出来else块。注意可能的副作用,如果i == index检查失败,它将返回0.

0

对于初学者来说,函数没有意义。功能中不使用参数length。也不需要包含检查该索引小于或等于魔术值CAPACITY的循环。

编译器,因为它是无法确定,这种情况

if(i == index) 

将永远如此规定,这种情况下

if(index <= CAPACITY){ 

也是如此发出一条消息。

此外它不清楚如何区分索引中数组中的有效值0。

0

你的else语句超出了for循环.so当你的for循环退出时,它执行else语句并且你写了“return 0”。所以它不会返回任何值。

相关问题