1

だから、私がやろうとしているのは、ユーザーにチーズを検索してもらい、それを画面に表示させることです。後者に問題があります。文字列を表示できないようですが、コードは実行されます。これが私のコードです:

#include<stdio.h>
#include<string.h>

    char cheeses[][20] = {
        "Cheddar",
        "White Cheddar",
        "Colby Jack",
        "Gouda",
        "Blue Cheese",
        "Gorgonzola",
        "Asiago", 
        "Limburger",
        "Feta",
        "Brie",
        "Goat",
    };

        void find_cheese(const char *search_for)
    {
        int i;
        for (i = 0; i < 5; i++) {
            if (strstr(cheeses[i], search_for))
                printf("Cheese %i: '%s'\n", i, cheeses[i]);
        }
    }

int main()
    {
        char search_for[20];
        printf("Search for: ");
        fgets(search_for, 20, stdin);
        find_cheese(search_for);
        return 0;
    }

それで、この場合、私は何をしますか。「Lim」と入力して、Limburgerを表示できるようにしたいと思います(将来的には、チーズに関する情報を表示できるようになります)。どうすればいいですか?

4

1 に答える 1

3

見た目は大丈夫ですが、最初に検索するのは5つだけで、Limburgerはリストの最後に近すぎます。

このタイプのコードは、「センチネル」、つまりリストが終了したことを示すために使用される特別なマーカーを使用して解決する方が適切です。文字列の場合、固定サイズの配列ではなく、文字列へのポインタの配列として配列を表すことができます。その場合NULL、番兵として使用するのは非常に自然です。

配列は次のようになります。

const char *cheeses[] = { "Cheddar", "White Cheddar", "Colby Jack",
          /* ... rest of the cheeses ... */
          NULL
};

次に、次のように検索ループを記述できます。

int i;

for( i = 0; cheeses[i] != NULL; ++i )
{
  /* Test and handling code here, against cheeses[i] just like before. */
}
于 2012-10-10T16:15:53.050 に答える