gpt4 book ai didi

c - 使用 bsearch 和 cstring,没有结果

转载 作者:行者123 更新时间:2023-11-30 14:56:31 24 4
gpt4 key购买 nike

我不知道为什么这段代码不起作用,我做错了什么?对于大学作业,我需要使用二分搜索来搜索带有名称的文件。
无论我如何尝试,结果始终是“在数组中找不到”。

#define TAM 10
#define NUM 10

int cmpfunc (const void * a, const void * b){
return (strcmp(a, b));
}

void binary_search (char str[][TAM]){
char * ptr_item;
char searchkey[TAM];

printf ("Enter a searchkey: ");
scanf ("%s", &searchkey);

ptr_item = (char*)
bsearch (&searchkey,str,NUM, sizeof(char*), cmpfunc);

if (ptr_item!=NULL)
printf ("%s found in the array.\n",ptr_item);
else
printf ("%s not found in the array.\n",searchkey);
return 0;
}

为了添加到主函数中,我使用此代码来读取文件,这一点工作正常。

void read (char str[][TAM]){

FILE *file;
file = fopen("Lista.txt", "r");

if(file == NULL){
printf("Arquivo não pode ser aberto!\n");
system("pause");
exit(0);
}

char nome[TAM];

for(int i=0; i<NUM;i++){
fgets(str[i], TAM, file);
}

fclose(file);
}

这是Lista.txt的内容:

CHRISTIA 
EBONIE
EMERSON
FLORIA
JOSEFINA
LAURO
MERRILEE
MILISSA
NANCY
RUTHAN
SHARAN
SHIRLEEN
TERI

主程序代码如下:

int main(){
char *str[NUM][TAM];
read(str);
binary_search (str);
return 0;
}

最佳答案

bsearch (&searchkey,str,NUM, sizeof(char*), cmpfunc);
// ------------- <--- wrong

您的数组包含 char[TAM] 类型的元素,而不是 char* 类型的元素。 这些类型并不相同。

fgets(str[i], TAM, file);

fgets 不会从字符串末尾删除换行符或任何其他空格。

scanf ("%s", &searchkey);

scanf("%s",...) 不会读取空格,包括换行符。

关于c - 使用 bsearch 和 cstring,没有结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44618135/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com