-1

在你的脑海中想象一个介于 1 到 100 之间的数字。然后,你的程序应该问你最少的问题,并根据你的答案确定你的数量。程序的问题格式是 Is it NN (<, =, >)?你可以用 3 种方式回答这个问题:< 表示你的数字小于计算机的猜测,= 表示程序猜对了你的数字,> 表示你的数字大于计算机的猜测。允许用户玩这个游戏任意次数。当用户准备退出时,输出平均猜测次数/游戏。

使用单独的函数来玩游戏。根据需要从 main() 重复调用该函数。

所以输出应该是这样的:

猜一个 1 到 100 之间的数字(包括两者),并准备好回答几个问题。

是 50 (<,=,>) 吗?<

是 25 (<,=,>) 吗?<

是 12 (<,=,>) 吗?>

是 18 (<,=,>) 吗?>

是 21 (<,=,>) 吗?<

是 19 (<,=,>) 吗?>

你的猜测是20

这是一场好比赛!你想再玩一次吗(y/n)?是的

猜一个 1 到 100 之间的数字(包括两者),并准备好回答几个问题。

是 50 (<,=,>) 吗?>

是 75 (<,=,>) 吗?<

是 62 (<,=,>) 吗?>

是 68 (<,=,>) 吗?>

是 71 (<,=,>) 吗?=

这是一场好比赛!

你想再玩一次吗(y/n)?n


这就是我到目前为止所拥有的。然而,函数 playGame() 甚至没有被执行。它没有任何计算就给了我 50 的值。

while ((round = 0)){
    printf("How about %d", guess);
    scanf("%c", &ans);

    if((ans = '<')){
        upper = guess;
        guess = (upper+lower)/2;
    }
    else if ((ans = '>')){
        lower = guess;
        guess = (upper+lower)/2;
    }
    else {
        round = 1;
        printf("Your number is %d", guess);
    }
}
return guess;
}
4

3 回答 3

3
while ((round = 0)){  // This is an assignment. It evaluates to zero and the loop
                      // never executes

尝试

while ((round == 0)){  // This is a comparison.
于 2013-09-22T09:34:01.377 回答
2

函数 playGame() 甚至没有被执行

是的。没有执行的是你在里面的循环,因为

while ((round = 0))

是分配,而不是比较。

于 2013-09-22T09:32:01.420 回答
2

你需要用来==比较两件事,not =,它将一个分配给另一个。您在三个地方都犯了这个错误,所以即使在您修复之后round = 0,它也会将每个答案视为<您修复其他两个。

从您执行此操作的条件周围的双括号if中,我假设编译器警告您您弄错了,并且您添加了额外的括号以禁用警告。如果您不知道自己在做什么,请不要忽略编译器警告。

于 2013-09-22T09:32:11.267 回答