我在使用这个“随机数游戏”时遇到了麻烦
我希望随机数只保留内部do的值,并在用户决定再次尝试时进行更改。
我认为在循环之外添加srand
每次都会改变值,但似乎并非如此。
//Libraries
#include <ctime>
#include <cstdlib>
#include <iostream>
using namespace std;
//Global Constants
//Function Prototypes
int rnd();//random number function
//Execution Begins Here
int main(int argc, char *argv[]){
//Declare Variables
unsigned int seed=time(0);
int n;
char a;
//set the random number seed
srand(seed);
do{
do{
//Prompt user;
cout<<"*** Random Number Guessing Game *** \n"
<<" Guess a number between 1-10, \n"
<<" Enter your number below! \n";
cin>>n;
//process
if(n<rnd()){
cout<<" Too low, try again.\n";
}else if(n>rnd()){
cout<<" Too high, try again.\n";
}else if(n==rnd()){
cout<<rnd()<<" Congradulations you win!.\n";
}
}while(n!=rnd());
cout<<"try again? (y/n)\n";
cin>>a;
}while(a=='y' || a=='Y');
system("PAUSE");
return EXIT_SUCCESS;
}
int rnd(){
static int random=rand()%10+1;
return random;
}
答案 0 :(得分:0)
想象一下很长的“伪随机”数字。有一个指向行中某个位置的指针,调用rnd()
打印出指向的数字,并将指针移动到下一个数字。下一次调用rnd()
会做同样的事情。除非两个相同的数字恰好相邻,这可能发生但不太可能,你会得到两个不同的数字,两个不同的rand调用。当您调用srand
时,基本上将指针设置为该行上的已知点,因此调用rnd()
将返回之前执行的操作。
在图片中:
srand(0)
... 1 9 3 4 9 7 ...
^ (srand puts the pointer to 9.)
a call to rand returns 9 and updates the pointer:
... 1 9 3 4 9 7 ...
^
the next call to rnd() will return 3.
If you call srand(0) again it'll be
... 1 9 3 4 9 7 ...
^
and a call to rnd() will return 9 again.
如果您希望保持相同的“随机”数字,请拨打rnd
一次并保存该值,直到您再次需要它,而不是每次都调用rnd。
答案 1 :(得分:0)
使用srand(time(NULL));
代替srand(seed);
。或者你可以改变
unsigned int seed=time(0);
^ You are seeding same value every time
到
unsigned int seed=time(NULL);