随机数怎么不能判读记忆输入是否一致呢
#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 编辑 ]