岩纸剪刀计划

时间:2017-06-21 09:56:21

标签: c++

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

int main() {  
char c_ch, p_ch;// c_ch = computer choice  ---- p_ch = player choice  
cin >> p_ch;  
c_ch = rand() % 3 + 1;  
switch (c_ch) {  
    case 1:  
        c_ch = "rock"; 
        break;  
    case 2:  
        c_ch = "paper";
        break;  
    case 3:  
        c_ch = "scissor";
        break;  
    default:  
        break;
}  
if (c_ch == "rock" && p_ch == "paper") cout << "p win";  
else if (c_ch == "rock" && p_ch == "scissor") cout << "c win";  
else if (c_ch == "paper" && p_ch == "rock") cout << "c win";  
else if (c_ch == "paper" && p_ch == "scissor") cout << "p win";  
else if (c_ch == "scissor" && p_ch == "paper") cout << "c win";  
else if (c_ch == "scissor" && p_ch == "rock") cout << "p win";  
return 0;  
}

 error: ISO C++ forbids comparison between pointer and integer [-fpermissive]

我该怎么办?我在未指定的行为中将此错误与字符串文字结果进行比较。 所以,我使用rand()从1到3中挑选一个数字,1个摇滚2纸和3个剪刀,并且在if语句下面我将它们与玩家的选择进行比较。

2 个答案:

答案 0 :(得分:3)

我已经强调了以下基本问题。您可以更改代码以使用更好的习语,但现在应该足够了。

您正在将字符与const char*值进行比较,这是形成错误的代码。形式为"__characters__"的C ++中的字符串文字属于const char*类型,并不意味着将这些值与字符进行比较,字符是简单的字符,而不是字符串。

#include <string>放在您计划的顶部,并将c_chp_ch的类型更改为std::string而不是char s

还使用int来分配rand()值,而不是c_ch

答案 1 :(得分:0)

呸。像"rock"&amp; c这样的字符串。适用于人类,而非计算机;在向用户输出信息或从中读取数据时,您只需要字符串。

您的具体问题是由于您尝试将const char[]字面值转换为char值而您的编译器在放弃之前尝试将文字衰减为const char*

最简单的解决方法是使用int类型,并将摇滚,纸张,剪刀的约定设为0,1和2.要开始使用,请接受用户的说明。

一旦您开始工作,请考虑从用户那里毕业以接受std::string。然后,您可以使用if块将其转换为0,1和2:

std::string input;
std::cin >> input;
// ToDo - map input to a number.

然后考虑使用enum,然后使随机数图形复杂化。