2015-03-10 2 views
-1

Je travaille actuellement sur un jeu en classe mais j'ai des problèmes lors de l'impression et de la vérification des chaînes. Essentiellement, il est hang man et j'ai besoin d'imprimer le mot comme juste _ (traits de soulignement) avec des espaces séparant chaque trait de soulignement. Je remplissais juste un code squelette et le code que je devais remplir ressemble à:Chaîne d'impression de valeurs supplémentaires C programmation

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; 
} 

J'ai essayé beaucoup de choses différentes et je suis incapable de réussir. Les problèmes seraient lorsque le mot est quelque chose comme unix, il va montrer _ _ _ _ + r 6 _ au lieu de seulement _ _ _ _ Je me suis échappé je pensais mais il ne ressemble pas à ça.

Les appels de fonction ressemblent à ceci:

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

:

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 ou tout autre débogueur est votre meilleur ami ici ... –

Répondre

1

La position de la '\0' finale est une erreur de calcul dans initializeBlankString:

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

devrait être:

revealedLetters[numLetter] = '\0'; 

Il y a beaucoup plus de problèmes avec votre code:

  • mandats modernes C types de retour de la fonction. void pour la première 2, int pour la dernière 2.

  • Vous ne pouvez pas comparer les tableaux omble chevalier if(word == revealedLetters)

+0

Merci, je savais l'ensemble des types int et void, mais ils ont formulé leur document, il a fait croire qu'ils n'étaient pas nécessaires ici. Quoi qu'il en soit, merci de l'avoir compris. En ce qui concerne la comparaison de tableaux de caractères, je viens de faire une boucle for qui vérifie chaque caractère l'un par rapport à l'autre et si tous correspondent, alors renvoyer 1 sinon retourner 0. – AndyPet74