C-索引处的返回值:控件到达非void函数的末尾

C-索引处的返回值:控件到达非void函数的末尾,c,compiler-errors,syntax-error,C,Compiler Errors,Syntax Error,首先:我最近刚开始用C(我的第一种编程语言)编程,这可能是一个愚蠢/简单的问题,但我试图实现一个函数,返回数组/列表中索引处的值。我总是从编译器那里得到这个错误:“错误:编译器到达非void函数的末尾”,即使我返回int类型的值。提前感谢: int list_get(int list[], int length, int index) { if(index <= CAPACITY){ for(int i = 0; i <= CAPACITY; i++){

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

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;
  }
}
int-list\u-get(int-list[],int-length,int-index){

如果编译器看到(index,则
return
语句都处于某种条件块下,因此它会尝试向您发出警告

以流程为例


  • index对于初学者,该函数没有意义。函数中未使用参数
    length
    。此外,不需要包含一个循环来检查索引是否小于或等于魔法值
    容量

    编译器发出一条消息,因为它无法确定此条件是否存在

    if(i == index)
    
    if(index <= CAPACITY){
    
    如果满足此条件,则始终为真

    if(i == index)
    
    if(index <= CAPACITY){
    

    if(index您的else语句超出for循环。因此,当for循环退出时,它会执行else语句,并且在那里您已写入“return 0”。因此它不会返回任何值。

    需要
    返回0;
    在for-loop之后。或者不使用类似于
    if(0
    列出[i]
    的前一次我的注释键入
    列出[index]