2013-08-03 4 views
0

컴파일하고 실행할 때 내 오류가 표시되지 않는 것 같습니다. "검색 대상 :"이 나타나면 결과를 표시해야하는 내용을 입력하지만 아무 일도 일어나지 않고 종료됩니다.배열을 열거하는 데 문제가 있습니다

헤드 퍼스트 C 책에서이 코드를 정확하게 재현했지만 (동일하게 작동하지 않습니다.), 검색시 검색 결과가 나타납니다.

내가 뭘 잘못 했니? 미리 감사드립니다 !!

Btw, 배열 + 배열 포인터가 내 머리를 롤. here를 바와 같이,

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

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

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

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

"이오 지마에서 온 소녀"라고 입력 하시겠습니까? –

답변

4

fgets 기능이 유효한 문자로 간주되기 때문에, 새로운 라인 (\n) 문자를 포함한다 : 여기서

코드의

개행 문자가 만드는 fgets는 읽기를 멈추지 만 함수에 의해 유효한 문자로 간주되어 str에 복사 된 문자열에 포함됩니다.

"I left my heart in Harvard Med School" 

"I left\n" 

과 너무 일치가 발생하지 않습니다

는 예를 들어, 확인하려고하는 것을 의미한다.

char search_for[80]; 
fgets(search_for, 80, stdin); 
search_for[strlen(search_for)-1] = '\0'; 
1

man 페이지 fgets에서 : 당신은 gets를 사용하거나 NUL로 \n 문자 (\0) 교체 시도 할 수 있습니다. "읽기는 EOF 나 개행 후 중지를 개행 문자를 읽을 경우,이에 저장 종료 널 바이트 ('\ 0')는 버퍼의 마지막 문자 뒤에 저장됩니다. "

코드에서 마지막 "Enter"키를 누른 후 search_for에 저장된 값은 실제로 "what_you_type"+ "\n"입니다. 그러나 tracks에는 "\n"이 포함되어 있지 않으므로 입력 한 내용을 찾지 못한 것은 놀랄 일이 아닙니다.

로 변경 tracks :

char tracks[][80] = 
{ 
    "I left my heart in Harvard Med School\n", 
    "Newark, Newark - A wonderful town\n", 
    "Dancing with a Dork\n", 
    "From here to maternity\n", 
    "The girl from Iwo Jima\n", 
}; 

와 "Iwo Jima"와 같은 문장 전체 또는 뭔가를 입력, 당신은 확실히 당신이 찾고있는 것을 찾을 수 있습니다.

+0

고마워요.하지만 책에 \ n이없고 코드가 작동하는 것처럼 보이고 단어 만 검색하고 전체 문장이나 다른 것을 검색 할 필요가 없다는 것이 흥미 롭습니다. 이것은 코드입니다. ! [전자 책 페이지의 스크린 샷] [1] [1] : http://i.stack.imgur.com/X25RC.png – spergy

+0

어쩌면이 책이 충분히 심각하지 않다. 트랙에 "\ n"을 추가하면 "Jima", "Iwo Jima", "Iwo Jima"등과 같은 각 문장의 마지막 단어 만 입력하여 찾을 수 있습니다. –

+0

충분히 심각하지 않습니까? 지금까지 읽은 모든 책에는 문제가 있습니다. 무엇을 제안합니까? – spergy

1

Jack의 대답은 OK입니다.당신은

는 fgets (검색하려는, 80, 표준 입력)를 대체 할 수

;

는 scanf ("%의 79s"검색하려는)에 의해

;

이 책의 에라타입니다. 나머지는 Errata for Head First C에서 볼 수 있습니다.

관련 문제