石头剪刀布程序
Rock paper scissor program
#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_ch
和p_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
但随后会使随机数绘图复杂化。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- C++,系统无法执行指定的程序
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 为什么我的石头剪刀布游戏不起作用?
- 石头剪刀布程序
- 石头剪刀布(C++)
- 石头剪刀布的麻烦
- C++中的石头剪刀布循环方法
- 随机在石头剪刀布游戏中在C++
- 从类中查看 rand() 并将用户输入与计算机选择进行比较.石头,纸,剪刀游戏
- 我正在尝试在 c++ 上制作石头、纸、剪刀游戏,需要一些建议
- 石头剪刀布游戏 c++
- C++曼德布洛特程序不会产生正确的输出
- 螺纹曼德布洛特程序C++
- 卡在 do while 循环C++的石头/纸/剪刀/蜥蜴/斯波克游戏 - 未声明的标识符
- 石头剪刀布的整数到字符转换
- 尝试在c++中用enum编写一个剪刀石头布程序
- 石头剪刀布错误