简单的猜词游戏

时间:2017-09-14 05:51:05

标签: c++ arrays ascii

bool guess(char c)
{
    if (guesses[c])
    {
       guesses[] = c;
       return true;
    }
    else if (c > ='a' && c <= 'z')
    {
       guesses[] = c;
       return false;
    }
}

bool guesses[255] = {};

我需要用这个来看看这个人是否在a-z之间输入了一个字符,如果他们还没有返回true,那么我将返回false。无论哪种方式,我也会用char更新猜测。现在我不明白如何将char添加到数组中,以便下次检查时它将是错误的并告诉它们已经猜到了。我知道这是使用ASCII表,但除此之外,我迷失了。任何人都可以解释为什么这不起作用。

我目前收到错误

  

在&#39;]&#39;

之前预期的主要表达

但如果我拿出支架,我会

  

不兼容的类型char to bool

哪个有意义,但是我怎么做到这样,char c将在布尔数组中标记为真

1 个答案:

答案 0 :(得分:1)

您已将括号留空,因此您目前无法提供索引:

guesses[c] = c;

但您也不想将char分配给guesses,您想要分配bool

guesses[c] = true;

那将编译*并修复你的问题 *请注意,> =也存在语法错误,我认为这只是编辑器对问题的复制+粘贴问题,但您应该将其修复为>=。您的函数guess也可能无法返回(如果ifelse if都不为真),这是未定义的行为。您应该确保所有控制路径都返回一个值,并且您应该确保在最高警告级别进行编译,以便对这些事情发出警告。

但不是你的设计。

由于您只处理字符a-z,因此您不需要像您一样分配所有255个元素。您可以简单地减去字符以获得正确的索引:

bool guesses[26];

if (c >='a' && c <= 'z')
    guesses[c-'a'] = true;

请考虑使用std::set(一个独特元素的容器)来跟踪角色是否被按下:

#include <set>

std::set<char> guesses;

bool guess(char c)
{
    // Have we already inserted this character?
    if (guesses.find(c) != std::end(guesses))
    {
        // Character has already been guessed:
        std::cout << "This character has already been guessed";
        return true;
    }
    else if (c >= 'a' && c <= 'z')
    {
        // Valid guess:
        guesses.insert(c);
        return false;
    }
}