C++ 写了个生成随机数的函数,但调用的时候出了点问题,请问有两个参数的函数怎么声明?

下面是两个函数用来生成随机数//函数:RandomInit//该函数取当前系统时间作为随机数发生器的种子voidRandomInit(){srand(time(NULL)... 下面是两个函数用来生成随机数
//函数:RandomInit
//该函数取当前系统时间作为随机数发生器的种子
void RandomInit()
{
srand(time(NULL));
}

// 函数:RandomInteger
// 该函数将0到RAND_MAX的区间的划分成high - low + 1 个
// 子区间。当产生的随机数落在第一个子区间时,则映射成low。
// 当落在最后一个子区间时,映射成high。当落在第i个子区间时
//(i从0到high-low),则映射到low + i
int RandomInteger(int low, int high)
{
return (low + (high - low + 1) * rand() / (RAND_MAX + 1));
}

然后我现在想在mian函数里调用它们来生成随机数,我是这样写的:

int main()
{
int in[3],rand[3];
int i,j,k,A,B;

void RandomInit();
int RandomInteger(int,int);
for(i=0;i<=2;i++)
{
in[i]=RandomInteger(0,9);
}
k=0;
while(k<=6)
{
cout<<"请输入你要猜测的数字:"<<endl;
for(i=0;i<=2;i++)cin>>in[i];
A=B=0;
for(i=0;i<=2;i++)
{
for(j=0;j<=2;j++)
{
if(in[i]==rand[j])
if(i==j)A++;
else B++;
}
}
cout<<A<<"A"<<B<<"B"<<endl;
k++;
}

return 0;
}
但是运行的时候有问题呀,无论输入什么数字都是0A0B,我觉得应该是生成随机数那块出了问题。。
求指导,谢谢!
1、游戏开始,电脑随机生成三个不重复的十以内的数字。
2、玩家输入他所猜测的三个数字
3、将玩家提交的数与电脑生成的数进行比较,结果显示成"*A*B"。A代表位置正确数字也正确,B代表数字正确但位置不正确,比如:"2A0B"表示您有2个数字的位置正确且数值也正确,除此以外,您还猜对了0个数字,但位置不对。
4、玩家共有7次机会,在7次内,如果结果为“3A0B”,游戏成功。如果7次里玩家都没有猜对游戏失败。
展开
 我来答
bhtzu
2013-05-18 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4252万
展开全部

两个问题:

  1. 每次取随机数必须先重新初始化,否则取出数据会一样

  2. 参数没有问题,取随机数的返回运算并不好,MAX范围太大而且可能产生溢出,建议改成取余数模式

int RandomInteger(int low, int high)
{
return (low + rand()%(high - low + 1) );
}


for(i=0;i<=2;i++)
{

RandomInit();
in[i]=RandomInteger(0,9);
}

更多追问追答
追问
我把初始化的条件加进去了,但运行时还是不对呀,输入任何3个数出来的都是0A0B。。

还有其实我没懂MAX那个语句为什么范围会太大溢出呀?

谢谢!
追答
void RandomInit()
{
  srand(time(NULL));
}
int RandomInteger(int low, int high)
{
    return (low + rand()%(high - low + 1));
}
int main()
{
    int in[3],rand[3];
    int i,j,k,A,B;
                                                                 
    void RandomInit();
    int RandomInteger(int,int);
    for(i=0;i<=2;i++)
    {
        RandomInit();
        rand[i]=RandomInteger(0,9);
    }
    k=0;
    while(k<=6)
    {
        cout<<"请输入你要猜测的数字:"<<endl;
        for(i=0;i<=2;i++)cin>>in[i];
        A=B=0;
        for(i=0;i<=2;i++)
        {
            for(j=0;j<=2;j++)
            {
                if(in[i]==rand[j])
                    if(i==j)A++;
                    else B++;
            }
        }
        cout<<A<<"A"<<B<<"B"<<endl;
        k++;
    }
                                                                 
    return 0;
}

你的代码逻辑错误,rand[i]没有赋值,以上代码调试ok

xz宏定义
2013-05-18 · TA获得超过1029个赞
知道小有建树答主
回答量:1621
采纳率:100%
帮助的人:230万
展开全部
A代表什么,B代表什么

如果A代表猜中次数,B代表失败次数的话
for(j=0;j<=2;j++)
{

if(in[i]==rand[j])
{
if(i==j)
A++;
}else B++;
}
}
追问
不好意思,前面没把题目要求讲清楚
我现在把A和B的含义加在问题补充里了
追答
#include<iostream>
using namespace std;
#include <stdlib.h>
#include <time.h>
void RandomInit()
{
  srand(time(NULL));
}
int RandomInteger(int low, int high)
{
    return (low + rand()%(high - low + 1));
}
int main()
{
    int in[3],rand[3];
    int i,j,k,A,B;
                                                                           
    void RandomInit();
    int RandomInteger(int,int);
    RandomInit();//放在循环外
    for(i=0;i<=2;i++)
    {
                  
        rand[i]=RandomInteger(0,9);
    }
    k=0;
    while(k<=6)
    {
        cout<<"请输入你要猜测的数字:"<<endl;
        for(i=0;i<=2;i++)cin>>in[i];
        A=B=0;
        for(i=0;i<=2;i++)
        {
            for(j=0;j<=2;j++)
            {
                if(in[i]==rand[j])
                    if(i==j)A++;
                    else B++;
            }
        }
        cout<<A<<"A"<<B<<"B"<<endl;
        k++;
    }
                                                                           
    return 0;
}

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhuhuaizhong
2013-05-18 · TA获得超过7276个赞
知道大有可为答主
回答量:3978
采纳率:63%
帮助的人:3615万
展开全部
生成某个范围内随机数应该是:low+rand()%(high-low+1)
RAND_MAX 是代表随机数的最大值,你rand如果产生小于它的值的话,两个整数除就是0了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式