我在c中理解rand()和srand()的概念时遇到了麻烦 . 我需要创建一个显示两个随机数的程序,让用户输入一个响应,然后将响应与一条消息匹配,并执行5次 .
我的问题是如何使用它,说明我不能使用time()函数,这似乎在每个关于rand()的教程中 .
这就是我到目前为止所拥有的 .
#include <iostream>
#include <cmath>
#include <cstdlib>
using namespace std;
int main()
{
int seed;
int response;
srand(1969);
seed=(rand()%10+1);
cout<<seed<<" * "<<seed<<" = ";
cin>>response;
cout<<response;
if(response==seed*seed)
cout<<"Correct!. you have correctly answered 1 out of 1."<<endl;
else
cout<<"Wrong!. You have correctly answered 0 out of 1."<<endl;
这只是输出6 * 6或7 * 7之类的东西,我认为种子变量不是必须不同但不是一直相同?
这就是输出应该是这样的:
3 * 5 =
34
Wrongo. You have correctly answered 0 out of 1.
8 * 1 =
23
Wrongo. You have correctly answered 0 out of 2.
7 * 1 =
7
Correct! You have correctly answered 1 out of 3.
2 * 0 =
2
Wrongo. You have correctly answered 1 out of 4.
8 * 1 =
8
Correct! You have correctly answered 2 out of 5.
Final Results: You have correctly answered 2 out of 5 for a 40% average.
这些是要求:
您的程序应该使用rand()根据需要生成伪随机数 . 您可以使用srand()初始化随机数生成器,但请不要使用任何“自动”初始化器(例如time()函数),因为这些可能与平台有关 . 你的程序不应该使用任何循环 .
4 回答
您使用
srand()
为随机函数设定种子 . 这是必要的,否则每次运行都会获得相同的数字序列,并且每次调用rand()
无论你喜欢什么,你都可以种兰德 . 您会发现大多数教程使用当前时间作为种子,因为返回的数字通常与程序的每次运行不同 .
如果你真的不能使用
time()
功能,我会将种子作为命令行参数传递 .你现在使用它的方式似乎很好 . 所有教程使用
time()
的原因是每次运行程序时数字都不同 . 因此,如果使用固定数字,则每次程序运行时,输出(数字生成)都是相同的 . 但是,根据您的要求,这似乎不是问题(如果您每次运行程序时需要随机生成不同,请在您的问题中指明) .但是,
rand()%10+1
是1 to 10
的范围,而不是0 to 10
.AFTER EDITS
要获得所需的输出,您只需要制作两个种子:
此外,您可以要求用户输入
seed
然后将其传递给srand
以使每次运行更随机 .关于要求:
std::time
是<ctime>
标头中的标准C函数 . 我不明白为什么结果是平台依赖的 .这也是一个非常奇怪的要求 . 循环是任何程序的基本构建块 . 这些要求对我来说似乎很奇怪,我会问你的教授或老师澄清一下 .
顺便说一句,因为这是C,你应该真正寻求使用std::uniform_int_distribution,例如
现在,您可以使用
rand()
在所需的时间间隔内生成一个数字 .在Windows上,如果time(),则可以使用GetTickCount() .
您可以使用不需要播种的rand_s .
在* nix系统上,您可以使用/ dev / random .
(How to use /dev/random)