0
#include <ctime>
#include <cstdlib>
#include <iostream>
using namespace std;


int main()
{
  // initialize the computer's random number generator
  srand(time(0)); rand();

  // declare variables
  char c1;
  char c2;
  char c3;

  c1 = 'R';
  c2 = 'P';
  c3 = 'S';

  // start loop
  while (true)
  {

    // determine computer's choice
    int result = rand() % 3; // 0 or 1 or 2

    if (result == 0) 
      result = c1;

    if (result == 1) 
      result = c2;

    if (result == 2) 
      result = c3;

    // prompt for, and read, the human's choice

    char humanChoice;
    cout << "Rock, Paper, or Scissors? [R/P/S or Q] ";
    cin >> humanChoice;
    cin.ignore(1000, 10);

    // if human wants to quit, break out of loop
    if (humanChoice == 'Q') break;


    // print results
    cout << result << endl;
    cout << humanChoice << endl;

  // end loop
  }

  // end program 



  return 0;
}

どうしたの?じゃんけんゲームを作成するという中間プロジェクトの最初のステップにいます。これはほんの始まりにすぎず、まだ終わっていませんが、すでにエラーが発生しています。これをコンパイルして実行すると、計算で 83 という数字が選択されたことがわかりますが、それは rp または s のいずれかでなければなりません。誰かが私がこれでどこを間違えたのか見ていますか?

4

5 に答える 5

2

結果int型です (したがって、cout によって 10 進数として解釈されます)。つまり、 char型を持つことを意味します(したがって、テキスト文字として解釈されます)。

また、結果を「オーバーロード」して、最初に値を保持し、rand() % 3次に文字値を保持します。一般に、読みやすくするために変数を分けておくのが最善です。オプティマイザーは、スタック スペースを節約するために同じストレージを再利用することを理解できます。

これを試して:

char result;

switch (rand() % 3)
{
case 0: result = c1; break;
case 1: result = c2; break;
case 2: result = c3; break;
}
于 2012-04-07T20:28:05.037 に答える
0

resultint、割り当てた文字の数値表現を格納(および印刷)します。

これを修正する方法は複数あります。1つは単にに変更resultすることcharです。番号を格納することもでき(0〜255に制限)、正しい出力が得られます。

より良い方法であるimhoは、最初に人間の入力を取得してから、コンピューターの選択に基づいて(できれば)を使用して、わずかにリファクタリングすることswitchです。

于 2012-04-07T20:29:33.993 に答える
0

83は、「s」のユニコード値を参照します。resultはintであるため、char's'をresultに割り当てると、intにキャストされます。したがって、83を出力します。

出力に別の変数を使用してみてください。例えば:

char response;
if(result==0)
    response = c1;
...
cout << response << end1
于 2012-04-07T20:31:24.710 に答える
0

取得している入力は char 型です。それを整数にキャストすると、問題の文字のASCII値が得られます。P の ascii 値は 80、R は 82、S は 83 です。

switch-case ステートメントで列挙型を使用することをお勧めします。

enum Choices { ROCK, PAPER, SCISSORS };
于 2012-04-07T20:32:17.503 に答える
0

cout << がオーバーロードされています。int と char では動作が異なります。変数の型が int の場合、出力は数値になります。char (文字) の場合 (サイズは気にしませんが、型は気にします)、出力は次のようになります。キャラクター。したがって、これを修正するには、前述のように結果変数の型を char にする必要があります。

于 2012-04-07T20:38:05.427 に答える