2012-09-14 7 views
0

wordCur은 대문자 문자열이며 사전은 문자열에 대한 배열입니다. 단어를 입력해도 상관없이 항상 0이 반환됩니다.if 문이 작동하지 않습니까?

편집 : 코드를 조금 업데이트하고 요약을 추가했습니다. 일부 컨텍스트에 대한 나머지 프로그램의 버전. 이 여기에 나타낸 바와 같이,이

int main() { 
    FILE *ifp; 
    ifp = fopen("dictionary.txt", "r"); 
    int* lDist[26]; 
    int* lUsed[26]; 
    int dictLen; 
    int i; 
    fscanf(ifp, "%d", &dictLen); 
    char dictionary[dictLen][7]; 
    char* letters[7]; 
    int scoreCur = 0; 
    int scoreHi = 0; 
    char wordCur[7]; 
    char wordHi[7]; 
    int isWord = 0; 





//reads the dictionary into the array 
for (i = 0; i < dictLen; i++) { 
    fscanf(ifp, "%s", &dictionary[i]); 
} 
    scanf("%s", wordCur); 
    isWord = checkValid(wordCur, dictLen, dictionary); 
    if (isWord == 1) { 
     scoreCur = calcScore(wordCur); 
    } 



//fclose(ifp); not sure why, but this causes a crash 
return 0; 
} 


int checkValid (char *wordCur,int dictLen, char dictionary[dictLen]) { 
    int valid = 0; 
    int i; 

    for (i = 0; i < dictLen; i++){ 
    int helper = strcmp(wordCur, dictionary[i]); 
    if (helper = 0){ 
     valid = 1; 
    } 
} 
+3

:'dictionary'가 배열이나 포인터도 아니다. – cnicutar

+0

당신이 '*'전에 단어 ** 사전을 놓친 것 같아 ** – hmmftg

+1

코드에서 일부 * 문자가 누락 된 것으로 의심됩니다. 그리고 포인터 평등을 검사하기 위해 포인터 주소를 비교하기보다는 strncmp를 사용하는 것이 좋습니다 –

답변

0

귀하의 코드는 아마 다음과 같아야합니다

유효한 C가 아니다
int checkValid(const char *wordCur,  // word to search for (string) 
       int dictLen,    // no of entries in dictionary 
       char dictionary[][7])  // dictionary (array of strings) 
{ 
    int valid = 0; 
    int i; 
    for (i = 0; i < dictLen; i++) 
    { 
     if (strcmp(wordCur, dictionary[i]) == 0) 
     { 
      valid = 1; 
      break; 
     } 
    } 
    return valid; 
} 
+0

요소의 수로 dictlen을 지정한다. 프로토 타입의'dictionary'는 효과가 없습니다. 그것은 다큐멘터리다고 주장 될 수 있지만 오도 될 수 있습니다. – cdarke

+0

그냥 [dictlen]이 실행 된 후 [7] (사전의 최대 단어 길이)를 추가하면 충돌이 발생하지만 항상 0을 반환합니다. – TLET

+0

호출 코드를 게시해야합니다. 정의되고 초기화 된'사전 '등 –

0

wordCur 대문자의 문자열입니다 checkValid을 얻을 때 그냥 충돌하고, 사전

이 시도 문자열의 배열입니다 :

int checkValid (const char *wordCur,int dictLen, const char *dictionary[]) 

그런데, 당신이 찾고있는 것을 찾은 후에도 당신은 계속 찾고 있으며, 어쨌든 문자열에 대해서는 상사가 잘못되었습니다. 내가 제안 :

for (i = 0; i < dictLen; i++){ 
    if (strcmp(wordCur, dictionary[i]) == 0){ 
     valid = 1; 
     break; 
    } 
} 
2

wordCur 대문자

int checkValid (char wordCur,int dictLen, char dictionary[dictLen]) 

아니, wordCur는 단일 문자의 문자열입니다. 문자열이 아닙니다. C의 문자열은 문자 배열로 표현되며 값이 0 인 문자로 끝납니다. 포인터 인자 char *wordCur이 필요합니다.

관련 문제