2016-06-18 3 views
1

私は、ユーザーからの入力文字列を取得することによって、トラックのリストからトラックを検索するプログラムを作っていました。私がcodeblocksコンパイラでこのプログラムを実行しようとしていたとき、strstr()関数は毎回0を返していました。どうして?

#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, m = 0; 
    for(i = 0; i<5; i++) 
    { 

制御コード行点で最大に達する

 m = strstr(tracks[i], search_for);  
     if(m) 
     { 
      printf("Track%i : '%s' \n", i, tracks[i]); 
     } 
    } 
} 

はstrstr()0

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

} 
+1

重複したhttp://stackoverflow.com/questions/16905728/strstr-function – flaviodesousa

+0

「search_for」に改行が含まれています。 – BLUEPIXY

答えて

2

を返しfgets任意の末尾が含まれていることに注意してくださいエントリの一部であるnewlineこのように削除することができます

search_for [ strcspn(search_for, "\r\n") ] = 0; // remove trailing newline etc 

これ以外の場合、一致するものは見つかりません。

fflush(stdin);は非標準であることに注意してください。リンクされた回答の1つに指定されたscanfは、特定の書式設定を使用しない限り、最初の空白で停止します。

+0

このプログラムは現在動作しています。しかし、私は 'fflush(stdin)'を使わないべき理由を知りたいですか? – Sudeep

+0

'fflush(stdin);'は標準C実装の一部ではありませんが、MSVCやその他の実装で定義されています。したがって、移植性がありません。 –

+0

私は新しい質問を投稿しました。私が調査したとき、 'fflush(stdin) 'を使用すると私が助けになることがわかりました。それを使用するのか、代わりのソリューションを探すべきでしょうか? – Sudeep

関連する問題