gpt4 book ai didi

c++ - 高低猜谜游戏 - 计算机猜测 c++

转载 作者:行者123 更新时间:2023-11-28 04:05:21 32 4
gpt4 key购买 nike

我在 CSC 101 中有一项作业,我必须编写一个程序,用户必须在其中想到一个介于 1 和 19 之间的数字,并且计算机必须在 5 次尝试内猜出它。现在程序提示我输入高位或低位两次。

我已经得到了一个使用 if 语句构建的模板,但我相信 switch 会更好用。我想不出另一种方法来让程序有条件地检查我给它的是高还是低。如果用户忘记按空格或其他内容,我不希望它默认为错误语句。这就是为什么我再次收到提示。

  cout << "is this your guess? Answer yes or no:" << guess << endl; 
cin >> yesno;
if (yesno != "yes" || "no") {
cout << "Please answer only yes or no" << endl;
cin >> yesno;
}

if (yesno == "no")
{
cout << "Too high or too low? Answer too high or too low" << endl;
cin >> highlow;
if (highlow == "too high")
guess = guess - 5;
if (highlow == "too low")
guess = guess + 5;
if (highlow != "too high" || "too low")
{
cout << "Please anwer only too high or too low" << endl;
cin >> highlow;
}

似乎总是在 yes==no block 中输入最后一个 if 语句,并提示我两次输入太高或太低。它不会在我的顶部 block 中执行。如果我不输入“太高”或“太低”,我希望它只会再次询问我提前谢谢大家,非常感谢任何帮助。

最佳答案

  cout << "is this your guess? Answer yes or no:" << guess << endl; 
cin >> yesno;
if (yesno != "yes" || "no") { // ***Problem here
cout << "Please answer only yes or no" << endl;
cin >> yesno;
}

if (yesno == "no")
{
cout << "Too high or too low? Answer too high or too low" << endl;
cin >> highlow;
if (highlow == "too high")
guess = guess - 5;
if (highlow == "too low")
guess = guess + 5;
if (highlow != "too high" || "too low") // ***Same problem
{
cout << "Please anwer only too high or too low" << endl;
cin >> highlow;
}

仅回答您的问题,问题主要在那些 bool 表达式中。有两个主要问题。在这一行中:
highlow != "太高"|| “太低”
你问的是表达式 highlow != "too high true,或者表达式 "too low" true。问题来自第二个问题。你的双方逻辑 OR 必须是完整的表达式。否则会发生 "too low" 被评估为 true 因为它是非零/非 null。因此 bool 表达式将始终评估为 true。

最快的解决方法是更改​​这些行(注意:此时仍然损坏):

yesno != "yes" || yesno != "no"  // Using || on this line is wrong

highlow != "too high" || highlow != "too low" // || is wrong here

第二个问题是您对 || 的使用。回想一下,对于逻辑 OR,只有一个参数为真,整个事情都为真。所以考虑:
yesno != "yes"||是没有!=“没有”

如果我键入 no,那么 yesno 确实不等于“yes”。即使我这样做了,我也会被提示输入一些有效的东西。因此,您当前将有效和无效输入标记为无效。有几种方法可以解决这个问题。最快的是把||改成&&
yesno != "yes"&& yesno != "no"

现在,如果我输入 no,第一种情况仍然为真,但第二种情况为假。并且因为如果任何参数为假,则逻辑 AND 为假,因此它返回假。这是正确的,因为 no 是一个有效的输入。另一种方法是避免过于消极的逻辑。
!(yesno == "yes"|| yesno == "no")

这只是德摩根定律在上述表达式中的应用(如果您当前的类(class)没有涵盖逻辑表达式,我假设另一门类(class)会)。 bool 表达式更容易理解,“yesno 是我的有效值之一吗?”然后它被否定,因为您正在检查输入是否无效。

最后一个问题是当您询问“太低”或“太高”时。 std::cin 只读到遇到空白为止。您将需要使用 std::getline(std::cin, std::string) 来读取它。为了避免 mixing std::cin and std::getline 带来的麻烦,只需一直使用 std::getline 来完成这项任务。

这应该可以回答您提出的问题。您的逻辑中还有其他问题,例如盲目地添加或减去 5。有一种更聪明的方法可以保证计算机在最多 5 次尝试中始终猜出您的号码。它涉及跟踪您的有效范围并每次都做出聪明的(呃)猜测。

关于c++ - 高低猜谜游戏 - 计算机猜测 c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58822877/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com