C中链表中的搜索函数
searching function in a linked list in C
我正在开发一个 bool 函数,returns 如果在链表上找到一个数字则为真,否则为假,不幸的是这段代码会产生错误
The ERROR:
contains.c:24:1: error: control may reach end of non-void
function [-Werror,-Wreturn-type]
}
^
1 error generated.
代码:
#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;
}
所以,我不知道错误在哪里?
函数 search
具有 return 类型 bool
。你必须return一个bool
。如果 for
循环中的条件为假,则不会 returned。这就是您的编译器所抱怨的。您可能想要 return false;
外部 if
.
的正文
顺便说一句,函数 search
中 return true;
之后的 exit(0)
永远不会执行。
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
循环体之外。 for
中的 exit(0);
是一条无效的语句,永远不会执行。
我正在开发一个 bool 函数,returns 如果在链表上找到一个数字则为真,否则为假,不幸的是这段代码会产生错误
The ERROR:
contains.c:24:1: error: control may reach end of non-void function [-Werror,-Wreturn-type] } ^ 1 error generated.
代码:
#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;
}
所以,我不知道错误在哪里?
函数 search
具有 return 类型 bool
。你必须return一个bool
。如果 for
循环中的条件为假,则不会 returned。这就是您的编译器所抱怨的。您可能想要 return false;
外部 if
.
顺便说一句,函数
search
中 return true;
之后的 exit(0)
永远不会执行。
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
循环体之外。 for
中的 exit(0);
是一条无效的语句,永远不会执行。