2017-12-31 7 views
-1

次のプログラムは、多次元配列を検索する必要があります。入力としてtownという単語を入力すると、Track 1: Newark,Newark-A Wonderful Townが返されますが、何も出力されません(何も起こりません)。Cプログラミング。なぜこれは機能しませんか?

私はヘッドファーストC本に取り組んでいます。

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

/* Run this program using the console pauser 
or add your own _getch, system("pause") or input loop */ 

char tracks[][80]={ 
     "I Left My Heart In Harvard Med School", 
     "Newark,Newark-A Wonderful Town", 
     "From Here to Maternity", 
     "The Girl From Iwo Jima", 
    }; 


void find_track(char search_for[]){ 
    int i; 
    for (i=0;i<=4;i++){ 
     if(strstr(tracks[i],search_for)){ 

      printf("Track %i:'%s' \n",i,tracks[i]); 

    } 
    } 
} 

int main(int argc, char *argv[]) { 
    char search_for[80]; 
    printf("Search for: "); 
    fgets(search_for,80,stdin); 
    find_track(search_for); 

    return 0; 
} 
+7

'Town'!=' town'。 – Amy

+0

どちらもうまくいきません –

+1

@光量子最初のコメントで指摘されていることとは別に、マニュアルの 'fgets'をチェックしてください。あなたが望むものではない改行文字も読みます。 – sjsam

答えて

2

としては、上記のあなたの入力からfgets店舗改行を指摘し、それが一致しません。最後の文字をsearch_for文字列から切り取ると、タイトルのテストの大文字と小文字が一致している限り動作します。また、ループのfori <= 4の代わりにi < 4である必要があります。

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

/* run this program using the console pauser or add your own getch, system("pause") or input loop */ 
char tracks[][80]={ 
     "I Left My Heart In Harvard Med School", 
     "Newark,Newark-A Wonderful Town", 
     "From Here to Maternity", 
     "The Girl From Iwo Jima", 
    }; 


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

int main(int argc, char *argv[]) { 
    char search_for[80]; 
    printf("Search for: "); 
    fgets(search_for,80,stdin); 
    search_for[strlen(search_for)-1] = '\0'; // truncate input 
    find_track(search_for); 

    return 0; 
} 
+4

'\ n'が出現する前に80文字に達した場合、その文字列の最後に' \ n 'は含まれません。これは、最後の文字の無条件の切り捨てがあまり良い習慣ではない理由です。 'search_for [strcspn(search_for、" \ n ")] = '\ 0';'は良い考えかもしれません。 – AnT

+3

'size_t len = strlen(search_for);を試してみてください。もしあなたが問題の中心を持っていれば)あなたは '' if(!len - 1)== '\ n' fgets(...)){/ *ユーザーがキャンセルした入力を処理する* /} ' –

+0

追加情報ありがとうございました。 –

関連する問題