| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 708 人关注过本帖
标题:出错了,随机数问题,帮忙
只看楼主 加入收藏
★红狼
Rank: 2
等 级:论坛游民
帖 子:190
专家分:17
注 册:2006-7-12
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
出错了,随机数问题,帮忙
/* 2个甩子游戏 */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <dos.h>
#include <iostream.h>

int main()
{
  int fa1();
  int fa2();
  int panduan(int[],int[]);
  
  int i;
  int wo[1],dian[1];
  char p,q;
  int sum=1,sum1=1;
  int ci,ji=0,hh=0,ss=0;
  
  cout<<"**欢迎来到2个帅子的游戏**!"<<endl<<endl;
  
  while(sum)
   {
      for(i=0;i<2;i++)
       {
       
        while(1)
          
        {
           
            cout<<"现在是否要第"<<i+1<<"甩子?是按Y,否按N。输入:";
            cin>>p;
            
            if(p=='y'||p=='Y')
            {
               cout<<i;
               dian[i]=fa1();
               wo[i]=fa2();
               break;  //跳出本循环
            }
              if (p=='n'||p=='N')
              {
               cout<<"游戏快乐,再见!"<<endl;
               getchar();   //退出暂停
               return 0;
              }
             if(q!='y'||q!='Y'||q!='n'||q!='N')
                 cout<<"你输入有误!请输入Y或N!"<<endl<<endl;   
           }   
       }
     ci=panduan(wo,dian);
    
     if(ci>0) hh++;
       else ss++;
     ji++;
     cout<<"你一共玩了:"<<ji<<"次;  赢了:"<<hh<<"次!"<<"; 输了:"<<ss<<"次!"<<endl<<endl;
     
     while(sum1)
      {
       cout<<endl<<endl;
       cout<<"是否再来一局?是的按Y或y,不玩了按N或n.输入:";   
       cin>>q;
       cout<<endl;
       if(q=='y'||q=='Y')
       {
         sum=1;
         system("cls") ;
         break;
       }
       if(q=='N'||q=='n') {sum=0;break;}
       if(q!='y'||q!='Y'||q!='n'||q!='N')
         cout<<"你输入有误!请输入Y或N!"<<endl;
         
      }   
   }
   
  return 0;
}
int fa2()             //怕随机种子相同 ,随机1
{
   
 int i;
 srand((unsigned)time(NULL));  
 i=rand()%5+1;
 return i;
}

int fa1()             //随机2
{
   
 int i;
 srand((unsigned)clock());
 i=rand()%5+1;
 return i;
}

 int panduan(int w[],int d[])
{
  cout<<endl;
  cout<<"你的第一个甩子数是:"<<w[0]<<"; 你的第二个甩子数是:"<<w[1]<<endl<<endl;
  cout<<"电脑的第一个甩子数是:"<<d[0]<<"; 电脑的第二个甩子数是:"<<d[1]<<endl<<endl;
  
  if(w[0]==w[1]&&d[0]==d[1])
    {
      if(w[0]>d[0])
        {
         cout<<"真厉害!你赢了这一局!玄!都是对子!"<<endl<<endl;
         return 1;        
        }     
        else {cout<<"这局输的真惨!就差那么一点,可惜了我的对子!"<<endl<<endl;return -1;}
    }
  if(w[0]==w[1]&&d[0]!=d[1])
    {
     cout<<"真爽!你大赢了这一局!有对子就是爽!"<<endl<<endl;
     return 1;
    }
  if(d[0]==d[1]&&w[0]!=w[1])
    {
     cout<<"真衰!你这一局输惨了!电脑是对子!"<<endl<<endl;
     return -1;
    }
  else
    {
     if(w[0]+w[1]>d[0]+d[1])
       {
        cout<<"真好!你赢了这一局!就比你多了那么点!"<<endl<<endl;
        return 1;
       }
      else
       {
        cout<<"哎!你输了这一局!!"<<endl<<endl;
        return -1;
       }
    
    }  

}

问题出在.我的第一个数 和电脑的 第二数 一样
还有 问题 for(i=0,i<2,i++)
 后面31行的输出,cout<<"现在是否要第"<<i+1<<"甩子?是按Y,否按N。输入:";中i+1 有时既然有数字7?
在我的监视i中 没有异常。

真的很奇怪!!
搜索更多相关主题的帖子: 随机数问题 出错了 
2009-08-10 02:02
xufen340
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:166
专家分:1351
注 册:2009-8-7
收藏
得分:20 
int wo[1],dian[1];你只分配了一个数的2个数组,后面却越界访问wo[1],dian[1]。
int wo[1],dian[1]在内存中连续分配,如
0:dian的值
1: wo的值
第一次:
wo[0]=1;
dian[0]=2;则内存:
0:2
1:1
第二次:
wo[1]=3;
dian[1]=4;则内存:
0:2
1:4 (这又是wo[0]的地址又是dian[1]的地址)
所以wo[0]和dian[1]相同。



2009-08-10 19:38
xufen340
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:166
专家分:1351
注 册:2009-8-7
收藏
得分:0 
另外主函数变量编写的乱了。
如考虑:
1。生成随机数函数:void beginRandom(int* pMy,int* pEnemy)(或者void beginRandom(int aMy[],int aEnemy[]))来取得所有4个随机数,一个函数够了不要分两个了,好像不会提高随机性。
2. 判断谁是胜利者:int checkWinner(int* pMy,int* pEnemy))(或者int checkWinner(int aMy[],int aEnemy[])),返回数值来分谁是胜利者,如0是你胜利,1是敌人胜利。
3.显示结果:void showResult(int* pMy,int* pEnemy,int winner),里面可以加输出,如cout<<<<"真爽!你大赢了这一局!有对子就是爽!".
4.在增加变量比如玩的局数,gamenumCount.你胜利的局数winGamenumCount(根据checkWinner的返回值加一)。



2009-08-10 20:00
★红狼
Rank: 2
等 级:论坛游民
帖 子:190
专家分:17
注 册:2006-7-12
收藏
得分:0 
以下是引用xufen340在2009-8-10 19:38的发言:int wo[1],dian[1];你只分配了一个数的2个数组,后面却越界访问wo[1],dian[1] 。//那里越界,                                                                     告诉下。谢谢!int wo[1],dian[1]在内存中连续分配,如  //不是wo[0],wo[1]和dian[0]dian[1]0:dian的值                                                    1: wo的值第一次:wo[0]=1;dian[0]=2;则内存:0:21:1第二次:wo[1]=3;  ...
     我原来是学习C的。因为在VC60上,C很难通过。所以只是把输入输出 换成C++的了。在VC里  sinf还出错。不知道是 不是软件问题。 谢谢 xufen340
2009-08-10 22:12
★红狼
Rank: 2
等 级:论坛游民
帖 子:190
专家分:17
注 册:2006-7-12
收藏
得分:0 
int wo[1],dian[1];你只分配了一个数的2个数组,后面却越界访问wo[1],dian[1] 。//那里越界, 告诉下。谢谢!

int wo[1],dian[1]在内存中连续分配,这应该是2个数组的地址,怎么会连续地址呢?
难道要
int wo[1];
int dian[1];

你说的是很有道理,不过我还一下子没有转过来。

再次谢谢xufen340
2009-08-10 22:17
xufen340
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:166
专家分:1351
注 册:2009-8-7
收藏
得分:0 
定义成int wo[2],dian[2];这样每个数组就能放2个数了阿,这样你wo[0]就不会与dian[1]内存重复了。数组定义出错阿。
2009-08-10 22:53
★红狼
Rank: 2
等 级:论坛游民
帖 子:190
专家分:17
注 册:2006-7-12
收藏
得分:0 
哦。谢谢 我试下。
不过 我是想,wo[1]不是够了啊。我就用wo[0],w0[1].

g感谢xufen340
2009-08-10 23:20
★红狼
Rank: 2
等 级:论坛游民
帖 子:190
专家分:17
注 册:2006-7-12
收藏
得分:0 
感谢xufen340
问题已经解决了。
2009-08-11 18:53
evileast8586
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2009-4-2
收藏
得分:0 
可否分享一下源码呢?学习一下!
2009-08-14 10:19
快速回复:出错了,随机数问题,帮忙
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.063570 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved