使用函数和中点对c++中的Gusser进行编号

Number Gusser in c++ using function and midpoint

本文关键字:Gusser 中的 编号 c++ 函数      更新时间:2023-10-16

我正在尝试使用函数为数字gusser编写代码:playOneGame函数应该有一个返回类型的void。它应该在1到100的范围内实现一个完整的猜谜游戏。
shouldPlayAgain函数应该具有布尔返回类型。它应该提示用户确定用户是否想再次播放,读入一个字符,如果该字符是"y",则返回true,否则返回false。此外,您应该实现助手函数getUserResponseToGuess和getMidpoint。它们应该在您的playOneGame函数中调用。getUserResponseToGuess。此函数应使用短语"是吗?(h/l/c):"提示用户,并用值替换令牌。它应返回一个字符。该字符应为三个可能值之一:"h"、"l"或"c"。它应具有以下签名:char getUserResponseToGuess(int guess)获取中点。这个函数应该接受两个整数,并且应该返回两个整数的中点。如果有两个值位于范围的中间,则应始终选择这两个值中较小的一个。应具有以下签名:int getMidpoint(int低,int高)我从它开始,但我仍然无法理解它的逻辑。这就是我迄今为止所拥有的。

#include<iostream>
using namespace std;
 void playOneGame;
 char getUserResponseToGuess(int guess);
 int getMidpoint ( int low, int high);
int main() {
do
 {
 playOneGame();
} while (shouldPlayAgain());
return 0;
}
void playOneGame
{
int a = 100;

cout << "nGuess a number between 1 and 100. " <<endl;
getUserResponseToGuess ( a);
 }

char getUserResponseToGuess(int guess)
{
while (true)
{
int guess = getMidpoint(minimum, maximum);
std::cout << "nIs it [h]igher/[l]ower/[e]qual to " << guess << "? ";
char answer;
if (!(std::cin >> answer))
{
    std::cerr << "error reading user input, program exitingn";
    exit(1);
}
if (answer == 'h')
    minimum = guess + 1;
else if (answer == 'l')
    maximum = guess - 1;
else if (answer == 'e')
{
    std::cout << "Well, isn't that nice.n";
    return;
}
if (minimum > maximum)
{
    std::cerr << "hey, you lied to me!n";
    exit(1);
}
}
}
int getMidpoint ( int low, int high)
{
int mid;
mid = (low + high) / 2;
return mid;
}

猜测循环应该循环如下:

while (true)
{
    int guess = getMidpoint(minimum, maximum);
    std::cout << "nIs it [h]igher/[l]ower/[e]qual to " << guess << "? ";
    char answer;
    if (!(std::cin >> answer))
    {
        std::cerr << "error reading user input, program exitingn";
        exit(1);
    }
    if (answer == 'h')
        minimum = guess + 1;
    else if (answer == 'l')
        maximum = guess - 1;
    else if (answer == 'e')
    {
        std::cout << "Well, isn't that nice.n";
        return;
    }
    if (minimum > maximum)
    {
        std::cerr << "hey, you lied to me!n";
        exit(1);
    }
}