#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,当它必须是r p或s时。有没有人看到我在哪里出错?
答案 0 :(得分:2)
结果的类型为 int (因此它被cout解释为十进制数),您的意思是它的类型为 char (因此它被解释为文本字符)。
此外,您已“超载”结果,首先保留rand() % 3
的值,然后再加上字符值。通常,为了便于阅读,最好将变量分开 - 优化器可以计算出为它们重用相同的存储空间来节省堆栈空间。
试试这个:
char result;
switch (rand() % 3)
{
case 0: result = c1; break;
case 1: result = c2; break;
case 2: result = c3; break;
}
答案 1 :(得分:0)
result
是int
,它将存储(并打印)您指定给它的角色的数字表示。
有多种方法可以解决此问题,一种方法是将result
更改为char
。您仍然可以在其中存储数字(限制为0-255)并且输出正确。
更好的方式,imho,将是一个轻微的重构,首先获得人类输入,然后根据计算机选择(最好使用switch
)。
答案 2 :(得分:0)
83指的是's'的unicode值。由于result是一个int,当你将char''分配给result时,它会被转换为int。因此,它输出83。
尝试使用不同的变量进行输出。例如:
char response;
if(result==0)
response = c1;
...
cout << response << end1
答案 3 :(得分:0)
您正在使用的输入是char类型。将其转换为整数将为您提供相关char的ASCII值。 P的ascii值为80,R为82,S为83。
最好使用带有switch-case语句的枚举:
enum Choices { ROCK, PAPER, SCISSORS };
答案 4 :(得分:0)
cout&lt;&lt;事情超载了。 int和char的行为不同。如果它是一个int,无论变量的类型是什么,那么输出将是一个数字,如果它是一个char(字符)(我们不关心大小,但我们关心类型)那么输出将是一个人物。因此,为了解决这个问题,结果变量类型必须是前面提到的char。