C++;在if语句中使用rand 一天前我开始了C++,我一直在尝试创建一个石头、剪纸、剪刀游戏。这段代码并不完全是它完成后的样子,但我这样做是为了演示我的问题
我制作了BRP,意思是:机器人石头剪刀,一个1-3之间的随机数,对应的数字将导致一个cout,说明机器人选择了什么项目 代码中的rand部分是通过查看不同的论坛和对前面问题的回答而生成的,但我似乎无法解决这个问题。每当我运行程序时,不管我做什么,它都会说“机器人选择了岩石”。但是,如果我删除if statemets,只需打印brps,每次都会显示一个随机数。所以我需要帮助找出为什么程序每次都选择岩石,而选择应该由兰德选择的数字来定义 请随意评论代码的其他部分,因为我希望所有的代码都写得有点糟糕:L 编辑:urps是用户输入答案的地方。我没有在这个例子中使用它C++;在if语句中使用rand 一天前我开始了C++,我一直在尝试创建一个石头、剪纸、剪刀游戏。这段代码并不完全是它完成后的样子,但我这样做是为了演示我的问题,c++,if-statement,random,C++,If Statement,Random,我制作了BRP,意思是:机器人石头剪刀,一个1-3之间的随机数,对应的数字将导致一个cout,说明机器人选择了什么项目 代码中的rand部分是通过查看不同的论坛和对前面问题的回答而生成的,但我似乎无法解决这个问题。每当我运行程序时,不管我做什么,它都会说“机器人选择了岩石”。但是,如果我删除if statemets,只需打印brps,每次都会显示一个随机数。所以我需要帮助找出为什么程序每次都选择岩石,而选择应该由兰德选择的数字来定义 请随意评论代码的其他部分,因为我希望所有的代码都写得有点糟糕:
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main()
{
cout<<"Hi! Welcome to ROCK PAPER SCISSORS!\n";
cout<<"To play, press enter.\n";
cin.get();
system("cls");
int game();
{
srand(time(NULL));
int brps = rand()>>4, urps;
brps = brps % 3 + 1;
cout<<"Bot chose ";
if (brps = 1){
cout<<"the rock.\n";}
else if (brps = 2){
cout<<"the paper.\n"; }
else if (brps = 3){
cout<<"the scissors.\n"; }
else{
cout<<"invalid.\n.";}
cin.get();
}
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
cout您应该在程序开始时只调用一次。不要每次需要随机数时都调用它,因为这样可以有效地重新初始化生成器
代码还有其他问题:
1) if(brps=1)
等是赋值,而不是比较
2)
看起来它是在定义一个嵌套函数,但事实并非如此。这里的game()
是一个原型,大括号中的东西只是直接在main()
中的一个嵌套块。我怀疑这不是您想要做的。您应该使用=进行比较,而不是=
如果写入brps=1,则将值1赋给变量brps,赋值表达式的值与赋给的值相同,即1。这是非零的,并转换为真,因此始终得到“岩石”
还要注意的是,如果您的意图是创建一个名为game的函数,那么代码就不是这样做的。额外的分号将其作为声明,表示在其他地方有一个名为game的函数,{}块就是一个{}块,而不是函数体
而且,正如chris在评论中所说,一定要打开编译器警告。不同的编译器会给出不同的警告,但是g++会给出警告,建议在赋值周围加上括号,用作真值,以供您使用=而不是=。编译器警告是编译器试图帮助您的,而程序员amming非常困难,您不应该拒绝任何帮助。您在if语句中使用赋值运算符=
,它将值1赋值给brps
,并返回true
值
请改用运算符==
顺便说一下:你不需要调用你的游戏();
编辑:
#包括
#包括
#包括
使用名称空间std;
int game();//这个声明了子程序game()
int main()
{
int exit;/*0继续,其他内容退出游戏*/
cout介绍了使用rand()、srand()等进行随机化的基本知识。这对您来说可能值得一读:
此外,您应该使用比较运算符(=
),而不是赋值运算符(=
)在您的if
比较中,使用=
实际上会设置和更改值,并且每次比较都是真的,因为结果将被分配到非零值。由于您的第一次if比较检查每次都因为这个原因成功,所以其他测试都不会执行,每次都会出错。 还请注意,为了尽可能接近真正的随机数,您必须使用一个不断变化的数字为随机数生成器添加种子,这是通过:srand(时间(0));
这可以放在实际调用随机数之前的任何位置
您还必须#包括,以便能够调用时间(0).并打开编译器警告。这就解决了问题。不敢相信我错过了,我甚至读过很多地方什么符号用来做什么,但显然我错过了:)谢谢。也感谢添加的信息。你们是最棒的:)谢谢你们的回答:)你介意进一步解释如何调用游戏()吗?@Hitesh Vaghani:在这种情况下,需要做更多的工作(请参见编辑后的答案),谢谢您的编辑。我知道“系统(“cls”)可能不适合其他平台,如果您知道其他解决方案,请随时告诉我:)我还想问一下,是否有办法让游戏在“游戏()“当一轮结束时,将其替换。编辑:我想我可以循环它吗?@Rezic:在示例中添加了一个循环。当然,某种退出条件必须被实际条件替换。它不是只调用一次吗?”?
int game();
{
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int game(); // This one declares the subroutine game()
int main()
{
int exit; /* 0 to continue, something else to exit the game */
cout<<"Hi! Welcome to ROCK PAPER SCISSORS!\n";
cout<<"To play, press enter.\n";
cin.get();
system("cls");
do { // This block will execute at least once
exit = game(); // This one calls the subroutine game()
} while (exit == 0); // ...and will execute again and again until exit != 0
return 0; // Or something useful
}
int game() // This implements the subroutine game()
{
srand(time(NULL));
int brps = rand()>>4, urps;
brps = brps % 3 + 1;
cout<<"Bot chose ";
if (brps == 1) {
cout<<"the rock.\n";
} else if (brps == 2) {
cout<<"the paper.\n";
} else if (brps == 3) {
cout<<"the scissors.\n";
} else{
cout<<"invalid.\n.";
}
cin.get();
if (some_kind_of_exit_condition) {
return 1; // results in exit == 1
}
return 0; // results in exit == 0
}