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将在布尔数组中标记为真
答案 0 :(得分:1)
您已将括号留空,因此您目前无法提供索引:
guesses[c] = c;
但您也不想将char
分配给guesses
,您想要分配bool
:
guesses[c] = true;
那将编译*并修复你的问题
*请注意,> =
也存在语法错误,我认为这只是编辑器对问题的复制+粘贴问题,但您应该将其修复为>=
。您的函数guess
也可能无法返回(如果if
或else 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;
}
}