2017-12-31 131 views
-1

다음 프로그램은 다차원 배열을 검색해야합니다. 입력으로 town이라는 단어를 입력하면 Track 1: Newark,Newark-A Wonderful Town을 반환해야하지만 아무런 결과가 나타나지 않습니다 (아무 일도 일어나지 않습니다), 어떤 생각을 고쳐야합니까?C-Programming.Why이 작동하지 않는 이유는 무엇입니까?

저는 헤드 퍼스트 C 책을 연구 중입니다.

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

/* Run this program using the console pauser 
or add your own _getch, system("pause") or input loop */ 

char tracks[][80]={ 
     "I Left My Heart In Harvard Med School", 
     "Newark,Newark-A Wonderful Town", 
     "From Here to Maternity", 
     "The Girl From Iwo Jima", 
    }; 


void find_track(char search_for[]){ 
    int i; 
    for (i=0;i<=4;i++){ 
     if(strstr(tracks[i],search_for)){ 

      printf("Track %i:'%s' \n",i,tracks[i]); 

    } 
    } 
} 

int main(int argc, char *argv[]) { 
    char search_for[80]; 
    printf("Search for: "); 
    fgets(search_for,80,stdin); 
    find_track(search_for); 

    return 0; 
} 
+7

'Town'! ='town'. – Amy

+0

둘 다 작동하지 않습니다. –

+1

@ 광섬유 첫 번째 주석에서 지적한 것과 별개로, 매뉴얼에서 fgets를 확인하십시오. 원하는 것이 아닌 개행 문자도 읽습니다. – sjsam

답변

2

으로는 입력에서 위, fgets 저장 바꿈을 지적하고는 일치하지 않습니다. 마지막 문자를 search_for 문자열에서 자르면 제목에있는 테스트의 대소 문자가 일치하는 한 제대로 작동합니다. 또한 for 루프는 대신 i < 4이되어야합니다.

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

/* run this program using the console pauser or add your own getch, system("pause") or input loop */ 
char tracks[][80]={ 
     "I Left My Heart In Harvard Med School", 
     "Newark,Newark-A Wonderful Town", 
     "From Here to Maternity", 
     "The Girl From Iwo Jima", 
    }; 


void find_track(char search_for[]){ 
    int i; 
    for (i=0;i<4;i++){ 
     if(strstr(tracks[i], search_for)){ 
      printf("Track %i:'%s' \n",i,tracks[i]); 
     } 
    } 
} 

int main(int argc, char *argv[]) { 
    char search_for[80]; 
    printf("Search for: "); 
    fgets(search_for,80,stdin); 
    search_for[strlen(search_for)-1] = '\0'; // truncate input 
    find_track(search_for); 

    return 0; 
} 
+4

'\ n '이 (가) 발생하기 전에 80 자의 한도에 도달 한 경우 문자열에 끝에 \ n이 포함되지 않습니다. 그래서 마지막 문자의 무조건 부 잘라 내기가 아주 좋은 방법이 아닙니다. 'search_for [strcspn (search_for, "\ n")] = '\ 0';'더 좋은 생각 일 수 있습니다. – AnT

+3

당신은'size_t len ​​= strlen (search_for); search_for [- len] = 0;'(그러나 문제가 해결 된 문제의 핵심을 얻었습니다.) 그리고 if (! fgets (...)) {/ * 사용자 취소 입력을 처리하십시오 * /}' –

+0

추가 입력 해 주셔서 감사합니다. –