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 に答える