#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语句下面我将它们与玩家的选择进行比较。
答案 0 :(得分:3)
我已经强调了以下基本问题。您可以更改代码以使用更好的习语,但现在应该足够了。
您正在将字符与const char*
值进行比较,这是形成错误的代码。形式为"__characters__"
的C ++中的字符串文字属于const char*
类型,并不意味着将这些值与字符进行比较,字符是简单的字符,而不是字符串。
将#include <string>
放在您计划的顶部,并将c_ch
和p_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
,然后使随机数图形复杂化。