2014-03-28 3 views
0

저는 C가 생소하며 사용자가 입력 한 단어가 올바른 단어인지 확인하는 프로그램을 작성하려고합니다. 나는 제안을 위해 stackoverflow를 샅샅이 살펴 봤지만 많은 것은 특별한 경우에 매우 특정하다. 내가 불길에 빠지기 전에,이 문법이 정확하지 않지만 그것을 고치는 방법에 대한 조언을 찾고 있음을 알고 있습니다. 내 주요 문제는 프로그램에 다음 행을 검사하도록 지시하는 것입니다 ("\ 0"다음에). 그리고 아마 while 조건은 더 이상 줄이 없어 질 때까지 C 검사에게 말하는 가장 좋은 방법은 아닙니다. 아래의 코드에서 필자는 테스트 할 때 사용하는 "userword"라는 문자열을 샘플로 비교하지만 궁극적으로 이것은 사용자 입력으로부터 변수가 될 것입니다.파일의 문자열을 사용자 텍스트로 검색/비교하기

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

int main (void) 
{ 
    FILE *fp; 
    fp = fopen("/usr/share/dict/words", "r"); 
    char line[50]; 
    while(fgets(line,50,fp) != NULL) 
    { 
     if(!strcpy(line,"userword")) 
     { 
      printf("Word exists\n"); 
      return 0; 
     } 
    } 
    printf("Word not found, try again.\n"); 
    return 0; 
} 
+0

을 난 후 파일에서 다음 문자열을 확인하는 '동안'루프 내에 중첩 된 또 다른 루프를 필요로 같은 직관적으로 보인다 각 "\ 0"이 발견됩니다. 끝 문자를 찾는 방법을 알아낼 수는 있지만 다음 줄로가는 방법을 모르겠습니다. 또는 C는이 파일을 하나의 연속 된 문자열로보고 각각 "\ 0"사이의 문자 만 검사하면됩니까? – Andy

+3

'strcpy()'? 'strcmp()'를 의미합니까? – jfly

+0

@jfly 우 예. 나는 102 발열로 이런 일을해서는 안된다는 것을 알고있었습니다. 고마워 많은 친구 – Andy

답변

3

strcpy()은 문자열을 복사합니다. 두 문자열을 비교하는 strcmp()을 사용해야합니다.

둘째, /usr/share/dict/words에서 줄을 읽으면 끝 부분에 줄 바꿈이 있습니다.

line[strlen(line) - 1] = '\0'; 

또는 userword\n과 비교 : 당신은 줄 바꿈을 제거해야합니다 (경우에 전에 잠시 후에이 추가) 중 하나. fgets()가 개행 문자 포함하기 때문에

+1

strlen()은 0을 반환 할 수 있습니다 ... – joop

+0

좋은 캐치. @joop은 정확합니다. 위의 코드는 줄 [-1]을 인덱싱하지 않도록 몇 가지 추가 오류 검사가 필요합니다. – esorton

+0

이것은 시원합니다. 내가 "\ n"을 작동하는 것으로 보이는 비교 문자열에 추가 할 때. 고마워요 @esorton – Andy

0

나는 트릭을 할 strncmp()을 권 해드립니다 :

if(!strncmp(line, "userword", strlen(line) - 1))