| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 513 人关注过本帖
标题:随机数怎么不能判读记忆输入是否一致呢
取消只看楼主 加入收藏
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
结帖率:100%
收藏
 问题点数:0 回复次数:3 
随机数怎么不能判读记忆输入是否一致呢
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <ctype.h>
#include <stdbool.h>
int main(void)
{
    char ag='Y';                //重新开始游戏   
    bool correct=false;               
    int score=0;               //记录正确的次数
    int length=0;
    time_t seed=0;
    int n=0;                    //存储输入的数字
    int i,j,p;
    time_t now=0;
    int time_taken=0;
    do
    {
    system("cls");
    printf("下面为一个简单的记忆游戏,\n\n");
    printf("屏幕中会随机出现几个数字,\n\n");
    printf("请仔细看并记住,数字仅显示1秒钟.\n\n");
    printf("之后数字会消失,然后需要你输入记住的数字,\n\n");
    printf("输入数字时候,切记数字之间的空格也需要输入,\n\n");
    printf("祝你好运,Enter开始游戏!\n\n");
    getch();
          correct=true;
          score=0;
          length=2;                       //控制初始随机数字的个数
         
          while(correct)
              {
                  length+=score++%3==0;     //连续正确3次,数字长度增加
            //    seed=time(NULL);         //1
            //    srand((unsigned int)seed);//2
            //    srand((unsigned)time(NULL)); //用当前时间,设置种子 //3
                srand((unsigned) time(&seed)); //4 //用seed的地址做种子?
                now=clock();
                for(i=1;i<=length;i++)
                    {
                        printf("%d ",rand()%10);    //打印随机数字序列
                    }
                for(;clock()-now<CLOCKS_PER_SEC;)   //等待1秒
                    
                printf("\r");                        //回到开头                        
                for(p=1;p<=length;p++)
                    {
                        printf("  ");               //打印2个空格覆盖数字
                    }   
                if(score==1)
                    {
                        printf("现在你输入记住的数字,别忘记空格\n");
                    }
                else
                    {
                        printf("\r");
                    }   
                srand((unsigned int)seed);        //重置随机序列
                for(j=1;j<=length;j++)
                    {
                        scanf("%d",&n);
                        if(n!=rand()%10)
                            {
                                correct=false;
                                break;
                            }
                    }
                printf("%s\n\n",correct?"正确!":"错误!");                  
            }   
          time_taken=(clock()-time_taken)/CLOCKS_PER_SEC;   //花费的时间
          printf("最后得分:%d",score*100/time_taken);
          fflush(stdin);
          printf("你想再次游戏吗,Y/N\n\n");
          scanf("%c",&ag);
        } while(toupper(ag)=='Y');
    return 0;
}

上面是我参考C经典的一个例子做的,运行没有问题了。但是有点地方不太明白,恳请哪位可以指导分析一下。我初学,好些东西不太明白。
问题:在上面//连续三行注释的地方,就是随机数生成的那个地方;我标记了1.2.3.4的地方。

问题一:用注释3的语句,产生的数字随机了,但是后面输入的记忆数字无论正确与否,都提示错误,这个是为什么呢?
二、单独用4.和3的区别是参数不同,一个是NULL,一个是&seed,实际运行结果是数字随机了,也可判断输入记忆数字是否正确了。我用了4,但是不是很理解。我自己百度查的,然后自己尝试的语句,但不是很理解原因。所以求分析帮忙。谢谢

[ 本帖最后由 wanglianyi1 于 2015-7-1 13:22 编辑 ]
2015-07-01 11:13
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
补充:我个人理解。1和2一起用,和单独3,这两种写法作用是一致的,但实际结果显示是不一样的。请问为什么呢?

[ 本帖最后由 wanglianyi1 于 2015-7-1 12:42 编辑 ]
2015-07-01 11:16
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
补充:1和2一起用看出来为啥数字不是随机的了,seed=time(NULL);赋值写错==了。---已修改
1和2一起用和4实现的结果一致了。
现在剩下的问题就是:
1、为啥单独用3,生成的数字是随机的,但是后面输入记忆数字后,不能正确判断输入是否一致,都提示错误。
2、1和2一起用和单独用3,个人理解两种写法作用是一致的,但实际结果不同,请问为什么呢?

[ 本帖最后由 wanglianyi1 于 2015-7-1 12:44 编辑 ]
2015-07-01 12:39
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
补充:我仔细想下,是不是当1和2时候,先通过time(NULL)随机产生一个种子赋值给seed,这时候seed就是固定的了,然后通过srand((unsigned int)seed);来产生随机数字序列。
如果单独用3,seed就是会随时间变化给变化,然后srand((unsigned)time(NULL));产生的随机数字序列也在不停变化,当后面输入记忆的数字时候,前面产生的随机数已经变成新的随机数了。所以每次判断都是提示错误。
2015-07-01 13:42
快速回复:随机数怎么不能判读记忆输入是否一致呢
数据加载中...
 
   



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

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