So I'm trying to get this program that will say good or bad depending on your answer and I didn't want to have a really long if and else if statement with a bunch of strings so I put a bunch of possible answers in two chars and I want it to answer depending on what you say. The program only replies to the good answers saying good even if you enter in one of the bad answers.
<head>
...
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
...
</head>
<body>
...
<div class='g-recaptcha' data-sitekey='PUBLIC_KEY'></div>
...
</body>
答案 0 :(得分:1)
尝试:
if ((strcmp(input.c_str(), good[0]) == 0) ||
(strcmp(input.c_str(), good[1]) == 0) ||
...
(strcmp(input.c_str(), good[4]) == 0))
或者更好地将关键字切换为字符串,
const string good[5] = {
"good", "great", "amazing", "amazing!", "fantastic"
};
然后
if ((input == good[0]) ||
(input == good[1]) ||
...
(input == good[4]))
甚至更好,将关键字打包成一组
const set<string> good{"good", "great", "amazing", "amazing!", "fantastic"};
然后
if (good.find(input) != good.end())
答案 1 :(得分:1)
这个:if (input01 == good[0 > 5] || good[0 < 5])
可能没有达到你的期望(因为我无法想象想要它真正做的事情)。
0 > 5
被评估为0是否大于5的测试。因为它显然不是,所以产生错误。由于它在需要整数的上下文中使用,因此它被转换为0,因此表达式的一部分变为if (input01 == good[0]
。
同样,0 < 5
测试0是否小于5(显然是),因此结果为true,转换为1,因此表达式的一部分为good[1]
。由于 反过来被用作布尔表达式,因此它被视为等同于good[1] != 0
。
所以你总体来说是if (input01 == good[0] || good[1] != 0)
。
这似乎非常接近无用,我很确定它不是你想要的。特别是,good[1]
是一个指针。当且仅当它是空指针时,指针才会比较等于0。由于它被初始化为指向某个东西,因此它不是空指针,因此表达式的一部分将始终被评估为真。
当然,你的其他if
陈述同样毫无用处。
如果您想检查input01
是否与good
中的任何项目相同,您可能(例如)使用std::find
:
if (std::find(std::begin(good), std::end(good), input01) == std::end(good))
// input01 was not present in `good`.
为了使这项工作正常,您将要使用std::string
s:
std::vector<std::string> good{"good", "great", "amazing", "amazing!", "fantastic"};
只有5个项目有点毫无意义,但如果您列出的good
和bad
字词可能会非常大,那么排序可能会更好他们,然后使用std::binary_search
,或者使用std::unordered_set
代替。
答案 2 :(得分:0)
为什么不检查input01是否在您的阵列中。您应该能够使用find()函数执行此操作。像
这样的东西if(std::find(std::begin(good), std::end(good), input01) != std::end(good))){do something}
您可能不需要std :: references