2011-02-03 3 views
-5

이것은 지금까지 컴파일했지만 출력이 잘못되어있는 프로그램입니다. 두 배열을 비교하고 동등한 경우 true를 반환하고 그렇지 않은 경우 false를 반환하는이 함수를 수정하려고합니다.C++ 교수형 (Hangman) 프로그램이 업무용인지 확인합니다

bool CheckWon (char selectedWord[], char gameBoard[]) 
{ 
    bool checkWon = false; 
    int length = strlen(selectedWord); 

    for (int i = 0; i < length; i++) 
    if (strcmp(gameBoard[i], selectedWord[i]) == 0) 
     checkWon = true; 

    return checkWon; 
} 
+1

문제가 무엇인지 명확히 설명하십시오. –

+1

무엇이 잘못되었는지에 대한 보고서/설명이 필요하며, 선호하는 플랫폼/컴파일러가 무엇인지 알려주는 것이 좋습니다. –

+1

로직에 결함이있는 경우 확실히 하나의 기능에 불과합니다. 맞습니까? 디버거를 살펴보고, 모든 것이 가지고있는 가치를보고, 기대했던대로 작동하지 않는 것을보십시오! – Cascabel

답변

6

흠, 습관으로 맨 아래로 스크롤하는 것만으로도 ... CheckWon에서 문제가 있습니까? 당신은 그와 같은 문자 배열을 비교할 수 없다. 당신은 그들을 문자별로 비교해야하거나 C++을 사용하고 있기 때문에 테스트 평등 있도록 std :: string 업그레이드하십시오.

증거를 들어, 그냥이 시도 :

#include <iostream> 

int main() { 
    char a[] = "Hello"; 
    char b[] = "Hello"; 
    if (a == b) { 
     std::cout << "equal" << std::endl; 
    } else { 
     std::cout << "not equal" << std::endl; 
    } 
    return 0; 
} 
0

을 편집 한 코드 (단지 CheckWon 기능)을 보면 : selectedWord 및 게임 보드 모두 null로 끝나는 문자 배열은? 그렇다면, 당신은이 기능을 다시 작성할 수 있습니다 :

bool CheckWon (char selectedWord[], char gameBoard[]) 
{ 
    return strcmp(gameBoard, selectedWord) == 0; 
} 

당신은 당신의 코드가 잘못된 답을주고있다라고하기 때문에

을 (귀하의 코드는하지만 훨씬 덜 효율적이 기능적으로 동일해야합니다.)하지만, , 나는 이것이 사실이 아니라고 생각한다. 그것이 사실이라면, 배열의 길이를 추가 args로 전달하고 논리를 약간 재 작성해야합니다. (나는 배열의 길이가 동일하다는 것을 테스트하여 시작하는 것이 좋습니다.)

편집 : 코드에 문제가있는 것은 두 인수가 CheckWon("foo", "boo");)

관련 문제