第一次使用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);
}
答案 0 :(得分:2)
bsearch 会返回指向找到元素的指针。
从第0个元素的地址中减去该地址。
然后除以元素的长度。
它为你提供元素的下标。
答案 1 :(得分:0)
你可以使用
pos=((int)ptr_item-(int)food_stuff_choices)/sizeof(char);
说明:这将获取 bsearch()返回的元素的地址,并将其整数转换为整数,然后将第一个元素的地址定位到数组并转换它整数。然后取两者的差异并除以列表数据类型的大小,即char
此代码会为您提供 pos ,这是数组中的位置
如果你只想打印值(不需要位置),那么下面的代码对你有好处:
printf("%s",*food_stuff_choices);