-1

頭の中で1から100までの数字を考えてください。次に、プログラムは最小限の数の質問をし、回答に基づいて数を決定する必要があります。プログラムの質問形式は NN (<, =, >) ですか? この質問には 3 つの方法で答えることができます: < は数値がコンピューターの推測よりも小さいことを示し、= はプログラムが数値を正しく推測したことを意味し、> は数値がコンピューターの推測よりも大きいことを意味します。ユーザーがこのゲームを何度でもプレイできるようにします。ユーザーが終了する準備ができたら、推測の平均数/ゲームを出力します。

別の関数を使用してゲームをプレイします。その関数を main() から必要に応じて繰り返し呼び出します。

したがって、出力は次のようになります。

1 から 100 までの数字を推測し、いくつかの質問に答える準備をしてください。

50(<、=、>)ですか?<

25 (<,=,>) ですか? <

12(<,=,>)ですか?>

18(<,=,>)ですか?>

21 (<,=,>) ですか? <

19(<,=,>)ですか?>

あなたの推測は20です

いい試合でした!もう一度プレイしますか (y/n) ? y

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

==を使用して 2 つのものを比較する必要があります=。一方を他方に割り当てる ではありません。この間違いは 3 か所で行われたため、 を修正した後でも、残りの 2 つを修正するまではround = 0すべての回答が同じように扱われます<

これを行った条件の周りの二重括弧から、ifコンパイラーはこれが間違っていることを警告し、警告を無効にするために余分な括弧を追加したと思います。何をしているのかわからない場合は、コンパイラの警告を無視しないでください。

于 2013-09-22T09:32:11.267 に答える
2

関数 playGame() も実行されません

もちろんそうだ。実行されないのはその中のループです。

while ((round = 0))

比較ではなく代入です。

于 2013-09-22T09:32:01.420 に答える