2015-03-10 4 views
-1

В настоящее время я работаю над игрой в классе, но имею некоторые проблемы при печати и проверке строк. По сути это вешающий человек, и мне нужно напечатать слово как _ (подчеркивание) с пробелами, разделяющими каждое подчеркивание. Я просто заполнение кода скелета и код, который я должен был заполнить выглядит следующим образом:Печать строк дополнительные значения C программирование

initializeBlankString(const int numLetter, char revealedLetters[25]) 
{ 
    int i; 
    for(i=0;i < numLetter; i++){ 
    revealedLetters[i] = '_'; 
    } 
revealedLetters[numLetter - 1] = '\0'; 
} 

printWithSpaces(char revealedLetters[25]) 
{ 
    int i; 
    for(i=0;i<(strlen(revealedLetters));i++){ 
    printf("%c ", revealedLetters[i]); 
    } 
} 

revealGuessedLetter(char word[], char revealedLetters[25], char guess) 
{ 
    int i, n = 0; 
    for(i=0;i<strlen(word);i++){ 
    if (word[i] == guess){ 
     revealedLetters[i] = guess; 
     n = 1; 
    } 
    } 
    return n; 
} 

checkGuess(char word[25], char revealedLetters[25]) 
{ 
    if(word == revealedLetters) 
    return 1; 
    else 
    return 0; 
} 

Я пробовал много разных вещей, и я не могу быть успешным. Проблемы будут, когда слово что-то вроде unix, покажет _ _ _ _ + r 6 _, а не только _ _ _ _ Я сбежал, подумал, но это не похоже на это.

вызовы функций выглядеть следующим образом:

initializeBlankString(strlen(word), revealedLetters); 
printWithSpaces(revealedLetters); 
charRevealed = revealGuessedLetter(word, revealedLetters, guess); 
won = checkGuess(word, revealedLetters); 

решение:

void initializeBlankString(const int numLetter, char revealedLetters[25]) 
{ 
    int i; 
    for(i=0;i < numLetter; i++){ 
    revealedLetters[i] = '_'; 
    } 
revealedLetters[numLetter] = '\0'; 
} 

void printWithSpaces(char revealedLetters[25]) 
{ 
    int i; 
    for(i=0;i<(strlen(revealedLetters));i++){ 
    printf("%c ", revealedLetters[i]); 
    } 
} 

int revealGuessedLetter(char word[], char revealedLetters[25], char guess) 
{ 
    int i, n = 0; 
    for(i=0;i<strlen(word);i++){ 
    if (word[i] == guess){ 
     revealedLetters[i] = guess; 
     n = 1; 
    } 
    } 
    return n; 
} 

int checkGuess(char word[25], char revealedLetters[25]) 
{ 
    for(int i = 0; i < strlen(word);i++){ 
    if(word[i] != revealedLetters[i]) 
     return 0; 
    } 
    return 1; 
} 
+0

GDB или любой другой отладчик это ваш лучший друг здесь ... –

ответ

1

Положение для окончательного '\0' является просчитались в initializeBlankString:

revealedLetters[numLetter - 1] = '\0'; 

Должно быть:

revealedLetters[numLetter] = '\0'; 

Есть еще много проблем с кодом:

  • Современных C функциональных мандатов возвращаемых типов. void для первого 2 int за последний 2.

  • Вы не можете сравнить массивы символов с if(word == revealedLetters)

+0

Спасибо, я знал об все типы int и void, но они, как они излагали свой документ, заставляли казаться, что они здесь не нужны. В любом случае, спасибо, вы поняли. Что касается сравнения массива char, я просто сделал цикл for, который проверяет каждый символ друг против друга, и если все совпадают, то возвратите 1, иначе верните 0. – AndyPet74

Смежные вопросы