石头剪刀布程序

Rock paper scissor program

本文关键字:程序 石头剪刀布      更新时间:2023-10-16
#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 语句中,我将它们与玩家的选择进行了比较。

我在下面强调了基本问题。 您可能可以更改代码以使用更好的习语,但对于以下内容,现在应该足够了。

您正在比较具有const char*值的字符,这是格式不正确的代码。 C++形式的字符串文字"__characters__"属于const char*类型,将这些值与字符进行比较没有任何意义,字符是简单明了的字符,而不是字符串。

在程序顶部放置一个#include <string>,并将c_chp_ch的类型更改为 std::string s 而不是 char s

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

哎呀。像 "rock" &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但随后会使随机数绘图复杂化。