0

ここでエラーが表示されないようです。コンパイルして実行すると、「検索:」が表示され、結果を表示する必要があるものを入力しますが、何も起こらずに終了します。

このコードを Head First C の本から (私が見ることができるものから!) 正確に再作成しましたが、同じようには機能しません。検索すると結果が表示されるようです。

だから私を殴ってください、私は何が間違っていましたか? 前もって感謝します!!

ところで、配列 + 配列ポインタは笑で頭を悩ませます。

コードは次のとおりです。

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

char tracks[][80] = 
{
    "I left my heart in Harvard Med School",
    "Newark, Newark - A wonderful town",
    "Dancing with a Dork",
    "From here to maternity",
    "The girl from Iwo Jima",
};

void find_track(char search_for[])
{
    int i;
    for (i = 0; i < 5; i++)
    {
      if (strstr(tracks[i], search_for))
           printf("Track %i: '%s'\n", i, tracks[i]);
}
}

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

3 に答える 3

1

ジャックの答えはOKです。

交換できます

fgets(search_for, 80, stdin);

scanf("%79s", search_for);

本書の正誤表です。他はHead First C の Errata で見ることができます。

于 2014-01-28T18:29:03.793 に答える
1

マニュアル ページ: 「読み取りはfgets、EOF または改行の後に停止します。改行が読み取られると、バッファに格納されます。終端のヌル バイト ('\0') は、バッファ内の最後の文字の後に格納されます。」

したがって、コードでは、最後の「Enter」が押された後、格納される値search_forは実際にはwhat_you_type「 +」\nです。ただしtracks、「」は含まれていません\n。入力したものが見つからなくても驚くことではありません。

変更tracks:

 char tracks[][80] = 
 {
    "I left my heart in Harvard Med School\n",
    "Newark, Newark - A wonderful town\n",
    "Dancing with a Dork\n",
    "From here to maternity\n",
    "The girl from Iwo Jima\n",
};

文全体または「Iwo Jima」のようなものを入力すると、探しているものが確実に見つかります。

于 2013-08-03T14:11:26.320 に答える