有没有办法在用bsearch()搜索char数组时找到元素的位置

时间:2013-12-13 16:16:18

标签: c bsearch

第一次使用bsearch(),我想知道有没有办法找到元素的位置或返回元素?

我有bsearch()工作,它返回一个指针,但从这里我无法用它来打印元素。

void choose_food_item(){
char food[20];
int qty;
int size = sizeof (food_stuff_choices) / sizeof (*fs);
char * ptr_item;
do{
printf("\nPlease Choose Your Food Items!!! When finished enter display to view plan\n");
fflush(stdout);
gets(food); // searchkey

/* sort the elements of the array */
qsort(food_stuff_choices,size,sizeof(*fs),(int(*)(const void*,const void*)) strcmp);

/* search for the searchkey */
ptr_item = (char*)
bsearch (food,food_stuff_choices,size,sizeof(*fs),(int(*)(const void*,const void*)) strcmp);

if (ptr_item!=NULL){
    //printf("%d\n",(int)*ptr_item);
    printf("Please Enter Quantity\n");
    fflush(stdout);
    scanf("%d",&qty);
    food_plan_item item = {food_stuff_choices[0], qty};
    add_food_plan_item(item);
}
else
    printf ("%s not found in the array.\n",food);

}while(strcmp("display",food) != 0);
}

2 个答案:

答案 0 :(得分:2)

bsearch 会返回指向找到元素的指针。

从第0个元素的地址中减去该地址。

然后除以元素的长度。

它为你提供元素的下标。

答案 1 :(得分:0)

你可以使用

pos=((int)ptr_item-(int)food_stuff_choices)/sizeof(char);

说明:这将获取 bsearch()返回的元素的地址,并将其整数转换为整数,然后将第一个元素的地址定位到数组并转换它整数。然后取两者的差异并除以列表数据类型的大小,即char

此代码会为您提供 pos ,这是数组中的位置

如果你只想打印值(不需要位置),那么下面的代码对你有好处:

printf("%s",*food_stuff_choices);