2016-10-03 7 views
1

트랙 배열에서 사용할 수있는 트랙이 있는지 검색하려고합니다. 입력 할 때 항상 strstr() 함수가 false를 반환합니다. else 블록을 사용하면 매번 else 블록이 실행됩니다.strstr() 함수가 false를 반환 할 때마다. 모든 입력을 전달할 때 항상 함수가 거짓이됩니다.

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", 
    }; 

    // function to search the track with entered search string // 
    void find_track(char search_for[]) { 
     int i; 
     for (i = 0; i < 5; i++) { 
      /** this if condition is returning false every time */ 
      if (strstr(tracks[i], search_for)){ 
      printf("Track %i: '%s'\n", i, tracks[i]); 
      }/**else{ 
       printf("some thing went wrong @ %i\n", i); 
      }**/ 
     } 
    } 



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

입력 : with

예상 된 결과 : 대한

gcc test.c -o test && test 

검색 Track 2:'Dancing with a Dork'

저를 도와주세요.

+0

디버거를 사용하여 단일 단계. – KevinDTimm

+4

[fgets에서 개행 문자 제거하기] (https://stackoverflow.com/questions/2693776). – user3386109

답변

2

fgets도 개행 문자를 읽습니다. 너를 search_for에서 제거한 후 find_track으로 전달해야합니다.

Removing the newline from fgets을 참조하십시오.

+2

우아한 보너스 대답으로 가십시오. 못생긴 대답이 아닙니다. –

+0

나는 이것을 달성하는 여러 방법을 보았습니다. 그러나 "search_for [len-1] = '\ 0;" 및 "search_for [strcspn (search_for,"\ n ")] = 0;"으로 변경하십시오. 그리고 사용하는 것이 더 낫고 이유는 무엇입니까? – Nara

+0

@Nara, 줄 바꿈 문자가 어디에 있는지에 대한 가정이 없기 때문에'search_for [strcspn (search_for, "\ n")] = 0;'이 더 좋습니다. –