2013-06-03 41 views
6

Tôi đang cố gắng viết một chương trình so sánh chuỗi con mà người dùng nhập vào với một chuỗi các chuỗi.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; 
} 

Khi tôi nhập ếch, ví dụ như nó sẽ in thông báo "ếch quái dị" nhưng không in được gì.

Vì vậy, tôi đã cố gắng viết một dòng để in ra giá trị của hàm strstr() mỗi lần và tất cả đều trả về 0, có nghĩa là tất cả các so sánh đều thất bại. Tôi không hiểu tại sao, ai đó có thể giúp tôi được không?

Trả lời

7

Điều này là do chuỗi của bạn chứa ký tự dòng mới.

Từ fgets documentation:

Một kí tự xuống dòng làm fgets ngừng đọc, nhưng nó được coi là một nhân vật có giá trị của các chức năng và nằm trong chuỗi sao chép vào str.

này nên giải quyết vấn đề (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 bao gồm ký tự dòng nhập mới trong bộ đệm. Chuỗi của bạn không có dòng mới trong đó, vì vậy chúng sẽ không bao giờ khớp.

5

Rất có thể, fgets() bao gồm ký tự dòng mới được nhập khi người dùng nhấn Enter. Xóa nó:

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

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

+2

@mf_ yeah [15 ký tự] –