需要在C ++中从00001到99999生成唯一的5位数字

时间:2018-03-24 20:21:01

标签: c++ random numbers uniqueidentifier

  

我们将修改现有菜单逻辑的一部分以为用户生成ID。此用户标识的类型为int,长度为5位。值为00001 - 99999,并且在生成时应在显示屏上显示全部5位数(前导零)。不要更改int的数据类型。检查setfill操纵器作为可能的帮助。 Setfill允许您使用输入参数将填充字符设置为值,例如前导零的“0”。研究它,你会发现你需要在使用后重置填充字符,否则你将在显示器上打印很多零!您的程序还应该保证为每个添加的新活动生成一个绝对唯一的用户ID。想想这是如何运作的......

目前,我一直试图让以下代码正常工作

srand(time(0));
cout << setfill('0') << setw(5) << rand() %99999 << endl;

问题是这根本不是随机的(它只是根据计算机内部时钟正好慢慢计算?)并且第一个数字始终为零。与说明一样,它应该在00001和99999之间。

编辑:我很欣赏不同的解决方案,但大多数解决方案都比我应该用于此任务的更先进。我非常确定srand()和rand()是我应该使用的。

1 个答案:

答案 0 :(得分:0)

好的,所以看来你必须使用rand()函数来生成1-99999之间的值。因此,考虑到这一点,以下代码应生成所需范围内的随机值:

#include <iomanip>
#include <iostream>

const int randID()
{
    return 1 + (std::rand() % (99999));
}

int main()
{   
    for(int i = 0; i < 1000; ++i)
        std::cout << std::setfill('0') << std::setw(5) << randID() << '\n';

    return 0;
}

对我而言,它打印出来,例如:

01886
21975
01072
11334
22868
26154
14296
32169
20826
09677
15630
28651

哪个应满足您在1-99999之间的0填充值的要求。另外,如评论中所述。请查看<random>以了解此任务之外的随机数需求,因为它会生成更优越的随机数,并提供更多的生成器,分布和更好的播种。