C++;在if语句中使用rand 一天前我开始了C++,我一直在尝试创建一个石头、剪纸、剪刀游戏。这段代码并不完全是它完成后的样子,但我这样做是为了演示我的问题

C++;在if语句中使用rand 一天前我开始了C++,我一直在尝试创建一个石头、剪纸、剪刀游戏。这段代码并不完全是它完成后的样子,但我这样做是为了演示我的问题,c++,if-statement,random,C++,If Statement,Random,我制作了BRP,意思是:机器人石头剪刀,一个1-3之间的随机数,对应的数字将导致一个cout,说明机器人选择了什么项目 代码中的rand部分是通过查看不同的论坛和对前面问题的回答而生成的,但我似乎无法解决这个问题。每当我运行程序时,不管我做什么,它都会说“机器人选择了岩石”。但是,如果我删除if statemets,只需打印brps,每次都会显示一个随机数。所以我需要帮助找出为什么程序每次都选择岩石,而选择应该由兰德选择的数字来定义 请随意评论代码的其他部分,因为我希望所有的代码都写得有点糟糕:

我制作了BRP,意思是:机器人石头剪刀,一个1-3之间的随机数,对应的数字将导致一个cout,说明机器人选择了什么项目

代码中的rand部分是通过查看不同的论坛和对前面问题的回答而生成的,但我似乎无法解决这个问题。每当我运行程序时,不管我做什么,它都会说“机器人选择了岩石”。但是,如果我删除if statemets,只需打印brps,每次都会显示一个随机数。所以我需要帮助找出为什么程序每次都选择岩石,而选择应该由兰德选择的数字来定义

请随意评论代码的其他部分,因为我希望所有的代码都写得有点糟糕:L

编辑:urps是用户输入答案的地方。我没有在这个例子中使用它

#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
}