2013-06-03 18 views
6

Kullanıcının bir dizi dizeyle girdiği bir alt dizeyi karşılaştıran bir program yazmaya çalışıyorum. o mesajı "kurbağalar tuhaf bulunmaktadır" yazdırmalısınız örneğinstrstr() işlevi

#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; 
} 

Ben, kurbağa girdiğinizde, ama hiçbir şey yazdırır.

yüzden) strstr (değerini yazdırmak her zaman çalışması için bir satır yazmaya çalıştı ve hepsi bütün karşılaştırmalar başarısız anlamına gelen 0 döndü. Nedenini anlamıyorum, biri bana yardım edebilir mi lütfen?

cevap

7

Bunun nedeni, dizenin yeni satır karakterini içermesidir. fgets documentation itibaren

:

Yeni satır karakteri fgets okuma durdurmak yapar, ama o işlev tarafından geçerli bir karakter olarak kabul edilir ve str kopyalanan dize dahildir.

Bu sorun, (demo) saptamak gerekir:

#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 tamponu içinde giriş satır karakteri içerir. Dizelerinizde bir satır sonu yok, bu yüzden asla eşleşmeyecekler.

5

Büyük olasılıkla, fgets() kullanıcı presler girin zaman girilir satır karakteri içerir. Bunu kaldırın:

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

'* p = 0;' == ', * p = '\ 0'' ?? –

+2

@mf_ yeah [15 karakter] –