Хотите знать, как «раскрыть» «скрытую» строку (отформатированную как ****) - PullRequest
0 голосов
/ 26 февраля 2019

Итак, я хочу создать что-то вроде игры.

Сначала у меня есть слово (строка), которое должен угадать пользователь.

Например, если у нас есть слово "Код", оно должно быть отформатировано в начале, как это "**** "и пользователь должен угадать слово.

У меня есть следующий код:

char hidden_word[ ] = "CODE";
char word2[ ] = "CODE";
char user_character = 0;

do 
  {
    printf("\nThe hidden word is : %s ", strset(hidden_word, '*') );
    printf("\nTry to guess it : ");

    user_character = read_char(); /// i created the read_char() function, it reads the input and automatically "UPPERCASE" it

  } while ( strchr (word2, user_character) == NULL );

Это прекрасно работает.Но моя проблема в том, что я не знаю, как «раскрыть» «hidden_word» в зависимости от ввода пользователя.Например, если пользователь вводит «O», программа должна сказать

"Nice try, the hidden word is now *O**"

Требуется помощь.Спасибо

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

У вас есть ряд проблем с вашим текущим кодом.

  1. Вы используете strset в цикле, поэтому вы продолжите устанавливать скрытое слово обратно на все *

  2. Ваше условие для завершения цикла неверно

  3. Вам необходим дополнительный цикл, чтобы превратить * в правильную букву

Исправление, которое может выглядеть следующим образом:

#include <stdio.h>

int main(void) {
    char correct_word[ ] = "CODE";
    char hidden_word[ ] = "****";
    char user_character;

    do 
    {
        printf("\nThe hidden word is : %s ", hidden_word );
        printf("\nTry to guess it : ");

        user_character = getchar();

        // Check for guessed characters
        int i = 0;
        while(correct_word[i])
        {
            if (correct_word[i] == user_character) hidden_word[i] = correct_word[i];
            ++i;
        }
    } while ( strchr (hidden_word, '*') != NULL );  // Check for * in the hidden word

    printf("\nThe hidden word is : %s ", hidden_word );

    return 0;
}
0 голосов
/ 26 февраля 2019

strchr возвращает указатель на первое вхождение в строке искомого символа.Если strchr вернул не-NULL, вы можете получить индекс найденного символа с помощью:

char *p = strchr(str, 'x');
if(p)
{
    ptrdiff_t pos = (ptrdiff_t)(p - str);
}

Затем получите вторую изменяемую строку, скажем, str2, это такая же длинаВаше слово, первоначально заполняется только с * с, и каждый раз, когда письмо найдено:

str2[pos] = found_character;
...