0

我看到很多关于如何搜索数组以查找特定实例的示例我想做的是找到所有实例并打印它们,例如我有这个结构

struct BookInfo
{
    char title[50];
    int numAuthors;
    char authors[50][50];
    int year;
    int checkedout;
};

struct BookInfo library[500];

而且我有一个功能可以在几年内进行搜索,但它只给了我它找到的第一个实例我如何让它给我机器人实例???继承人的功能

int yearsearch()
{
int target, i, l, r, mid;
    l = 0;
    r = 14-1;
    printf("type a year to search for book");
    scanf("%d", &target);

    while(l <= r)
    {
        mid = (l+r)/2;
        if(library[mid].year == target)
        {
            printf("\n%s",library[mid].title);
            printf("  %d",library[mid].year);
            printf("These are all the books with that year");
            break;
        }
        else if (library[mid].year < target)
        {
            l = mid + 1;
        }
        else
        {
            r = mid - 1;

        }

        if(l > r)
            printf("The target is not in the array.\n");

    }
menu();

}
4

1 回答 1

3

您正在对数组进行一种二进制搜索,它并非旨在在不修改的情况下查找所有实例。您是否考虑过仅对数组长度进行线性搜索(即for循环)并打印数组元素是否符合您的搜索条件?有人可能会像这样实现一个简单的线性搜索:

for (int i = 0; i<500; i++) {
   if (library[i].year == target) {
       // Do your printing here
   }

   // Otherwise do nothing!
}
于 2013-05-07T03:55:34.620 回答