使用 bsearch 查找姓氏以字符 c 开头的人
Find person with surname that starts with character c using bsearch
我找不到我下面的代码有什么问题。它编译,但不能正常工作。它要做的是使用bsearch找到姓氏以字符c开头的人。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char name[26];
char surname[26];
} Person;
int compare(const void *a, const void *b) {
char x = (*((Person*)a)).surname[0];
char y = (*((Person*)a)).surname[0];
if(x < y) return -1;
else if(x > y) return 1;
else return 0;
}
int main() {
Person array_person[]={{"Mike", "Anthony"},
{"Dave", "Eric"},
{"Danny", "Markle"},
{"Anne", "Redmayne"},
{"Lulu", "Rsu"}};
char c;
scanf("%c",&c);
Person *p;
p = (Person*)bsearch(&c,array_person,sizeof(array_person)/sizeof(Person),sizeof(Person),compare);
printf("%s %s",p->name, p->surname);
return 0;
}
调用的第一个参数(参数 'a' )需要是字符 c 而不是 Person 的实例。请看这里,希望对您有所帮助。
int compare(const void *a, const void *b) {
char x = (*(char*)a);
char y = ((Person*)b)->surname[0];
if(x < y) return -1;
else if(x > y) return 1;
else return 0;
}
int main() {
Person array_person[]={{"Mike", "Anthony"},
{"Dave", "Eric"},
{"Danny", "Markle"},
{"Anne", "Redmayne"},
{"Lulu", "Rsu"}};
char c;
scanf("%c",&c);
Person *p;
p = (Person*)bsearch(&c,array_person,sizeof(array_person)/sizeof(Person),sizeof(Person),compare);
if( p==NULL )
printf("Not found\n");
else
printf("%s %s\n",p->name, p->surname);
return 0;
}
您需要注意,在您编写函数时,它总是会查找姓氏以给定字符开头的人,而不是所有的人。我不确定这是否是你应该实现的。
我找不到我下面的代码有什么问题。它编译,但不能正常工作。它要做的是使用bsearch找到姓氏以字符c开头的人。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char name[26];
char surname[26];
} Person;
int compare(const void *a, const void *b) {
char x = (*((Person*)a)).surname[0];
char y = (*((Person*)a)).surname[0];
if(x < y) return -1;
else if(x > y) return 1;
else return 0;
}
int main() {
Person array_person[]={{"Mike", "Anthony"},
{"Dave", "Eric"},
{"Danny", "Markle"},
{"Anne", "Redmayne"},
{"Lulu", "Rsu"}};
char c;
scanf("%c",&c);
Person *p;
p = (Person*)bsearch(&c,array_person,sizeof(array_person)/sizeof(Person),sizeof(Person),compare);
printf("%s %s",p->name, p->surname);
return 0;
}
调用的第一个参数(参数 'a' )需要是字符 c 而不是 Person 的实例。请看这里,希望对您有所帮助。
int compare(const void *a, const void *b) {
char x = (*(char*)a);
char y = ((Person*)b)->surname[0];
if(x < y) return -1;
else if(x > y) return 1;
else return 0;
}
int main() {
Person array_person[]={{"Mike", "Anthony"},
{"Dave", "Eric"},
{"Danny", "Markle"},
{"Anne", "Redmayne"},
{"Lulu", "Rsu"}};
char c;
scanf("%c",&c);
Person *p;
p = (Person*)bsearch(&c,array_person,sizeof(array_person)/sizeof(Person),sizeof(Person),compare);
if( p==NULL )
printf("Not found\n");
else
printf("%s %s\n",p->name, p->surname);
return 0;
}
您需要注意,在您编写函数时,它总是会查找姓氏以给定字符开头的人,而不是所有的人。我不确定这是否是你应该实现的。