2013-06-03 7 views
6

ユーザが入力した部分文字列と文字列を比較するプログラムを作成しようとしています。それがメッセージ「カエルは気紛れです」を印刷する必要があります例えばstrstr()function

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

char animals[][20] = { 
    "dogs are cool", 
    "frogs are freaky", 
    "monkeys are crazy" 
}; 

int main() { 
    char input[10]; 

    puts("Enter animal name: "); 
    fgets(input, sizeof(input), stdin); 

    int i; 
    for(i = 0; i < 3; i++) { 
     if(strstr(animals[i], input)) 
      printf("%s", animals[i]); 
    } 
    return 0; 
} 

私は、カエルを入力すると、それは何も出力しません。

私は毎回strstr()関数の値を出力するために行を書くことを試みましたが、それらはすべて0を返しました。つまり、すべての比較が失敗しました。私はなぜ、誰かが私を助けてくれるのか理解できませんか?

答えて

7

これは、文字列に改行文字が含まれているためです。 fgets documentationから

改行文字はfgetsの読み込みを中止になり、それは関数で有効な文字と見なさとstrにコピーされた文字列に含まれています。

これは(demo)問題を修正する必要があります。

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

char animals[][20] = { 
"dogs are cool", 
"frogs are freaky", 
"monkeys are crazy" 
}; 

int main() { 
    char input[10]; 

    printf("Enter animal name: "); 
    scanf("%9s", input); 

    int i; 
    for(i = 0; i < 3; i++) { 
     if(strstr(animals[i], input)) 
      printf("%s", animals[i]); 
    } 
    return 0; 
} 
5

fgetsには、バッファに入力改行文字が含まれています。あなたの弦には改行がないので、決して一致しません。

5

ほとんどの場合、fgets()には、ユーザーがEnterキーを押したときに入力される改行文字が含まれています。削除する:

char *p = strchr(input, '\n'); 
if (p) 
    *p = 0; 
+0

'* pを= 0;' == '* pを=「\ 0''を?? –

+2

@mf_ええ[15文字] –