在C中的链表中搜索功能

时间:2015-04-09 11:15:44

标签: c linked-list singly-linked-list

我正在处理bool函数,如果在链表上找到一个数字则返回true,否则返回false,遗憾的是此代码生成错误

  

错误:

     

contains.c:24:1:错误:控制可能会达到非空白的结束    函数[-Werror,-Wreturn-type]   }    ^   生成1个错误。

代码:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

#define SIZE 10

//make a struct called node
typedef struct nodes{
    int n;
    struct nodes* next;
}node;
//initiate a pointer to the node type
node* head=NULL;
//search function
bool search(int number){
    //traverse the list
    for(node* conductor=head;conductor!=NULL;conductor=conductor->next){
        if(conductor->n==number){
            return true;
            exit(0);
        }
    return false;
    }
}
//main function
int main(void){
    //make the linked list
    for(int i=0;i<SIZE;i++){
        node* new=malloc(sizeof(node));
        if(new==NULL){
            exit(0);
        }
    //initiate the new node
    new->n=i;
    new->next=head;
    head=new;
    }
    printf("The linked list is ready\n");
    printf("Please enter the number you are looking for:\n");
    int number;
    scanf("%i",&number);
    if(search(number)){
        printf("found\n");
    }
    else{
        printf("Sorry, not found in the list. The list only contains:\n");
    }
    //printing the list components
    for(node* conductor=head;conductor!=NULL;conductor=conductor->next){
        printf("%i ",conductor->n);
    }
    printf("\n");
    return 0;
}

所以,我不知道错误在哪里?

2 个答案:

答案 0 :(得分:1)

函数search的返回类型为bool。您必须返回bool。如果for循环中的条件为false,则不会返回任何内容。这是你的编译器抱怨的。您可能希望在return false;的正文之外if

<小时/> 顺便说一下,函数exit(0)return true;之后的search永远不会执行。

答案 1 :(得分:1)

search功能应该像

bool search(int number){
    //traverse the list
    for(node* conductor=head;conductor!=NULL;conductor=conductor->next){
        if(conductor->n==number){
            return true;
        }
     }
     // If not found
     return false;
}  

return false;语句放在for循环体之外。 exit(0);中的for是一个没有效果的声明,永远不会执行。