2014-08-27 2 views
2

다음 코드는 scanf과 작동하지만, fgets (검색이 항상 실패 함)과 작동시키는 법을 모르겠습니다. 제발 저를 도울 수 있습니까 (저는 초보자입니다)?이 코드를 fgets와 함께 사용할 수 있습니까?

그리고 가능한 경우 fgets과 작동하지 않는 이유는 무엇입니까?

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


int main(){ 
    char word[80]; 
    puts("Hello, type a word: "); 
    fgets(word, 80, stdin); 
// scanf("%79s", word); 

    for(int i= 0; i < 5; i++){ 
     if(strstr(tracks[i], word)){ 
      printf("Found the track: %s\n", tracks[i]); 
      break; 
     } 
    } 


    return 0; 
} 
+2

'fgets'은 문자열에 개행을 남기고,'scanf'는 그렇지 않습니다. – Barmar

답변

5

fgets(word, 80, stdin)scanf("%79s", word)의 차이는있는 동안 scanf이없는 것, fgets 하나가 널 (NULL) 종료 전에 '\n'을 포함 할 것입니다. 따라서 strstrNULLfgets을 반환합니다. 마지막에는 일치하지 않는 '\n'가 있습니다.

문자열을 만들기 위해 일반적으로 두 가지 방법이있다 다시 동일 - 당신이 word (선호)의 끝에서 '\n'을 제거, 또는 당신이 찾는 단어의 끝에 '\n'를 추가 할 수 있습니다 중 하나 (권장하지 않음).

+1

+1 부수적 인 추가 :'fgets()'가 ('\ n'까지) 첫 번째까지는 scanf ("% 79s"'는 공백을 스캔하지 않습니다. – chux

관련 문제