gpt4 book ai didi

c++ - 将随机整数写入文本文件而不重复

转载 作者:太空狗 更新时间:2023-10-29 21:12:38 26 4
gpt4 key购买 nike

我是编程和 Stack Overflow 的新手。所以我一直在构建一个简单的数据库来享受自己的乐趣并练习我的知识。它注册用户的用户名、密码并分配用户 ID。到一个文本文件,还可以查看用户的信息。

我的主要问题是我希望程序为用户分配一个从 1 到 1000 之间随机的 ID(例如 1000 是最大员工数)。

此代码块在用户注册新用户名和密码时执行。程序在此部分输出用户名、密码和用户 ID。我能够让程序为每个用户输出一个随机数,但我无法让它生成没有重复的数字。

程序应输出一条消息,表明如果没有更多可用的用户 ID,则注册过程将不会完成。

我创建了一个打印一堆行以清除屏幕的函数,但所有内容都在底部。如果我可以使用不同的功能,我会很高兴知道!

if (passwordCheck == password) {
const int minEmp = 1, maxEmp = 10;
srand(time(0));
userID = (rand() % (maxEmp - minEmp + 1)) + minEmp;

ofstream outfile (username + ".txt"); //Creates txt file with user name
outfile << "User ID: " << userID << endl << //Outputs info to txt file
"Account Username: "<< username << endl
<< "Account Password: " << password;
outfile.close();
clearScreen(); //My function to add lines to clear the screen

cout << endl << "Your account has been created." << endl
<< endl << "Returning to main menu.";

clearScreen();
mainMenu(); //Function to return back to menu

最佳答案

您的基本问题是随机数生成不能保证唯一性。它当然不能保证程序运行之间的唯一性(例如,如果你想在程序的多次运行期间修改数据库,并保持一致性)。因此,您需要一种生成一组唯一 ID 的方法,删除之前使用过的所有 ID(例如,在数据库中表示),然后随机播放剩下的任何内容。

一种方法可能是;

  1. 创建一个包含 1000 个(或您需要的任何数量)唯一 ID 的列表(例如在 vector 中)。这可以通过一个简单的循环来完成,或者将 std::generate() 与每次调用时返回不同值的适当生成器一起使用。生成唯一 ID 的方法需要一致(无随机性)才能使第二步起作用。
  2. 读取数据库并从中删除数据库中的每个 ID列表。
  3. 如果剩余列表有零个元素,则不允许添加更多用户。
  4. 打乱列表。在 C++11 或更高版本中,使用 std::shuffle()。你会需要阅读随机数生成。在 C++14 之前,你可能使用 std::random_shuffle(),但请记住它使用 rand()生成随机值,其质量是不确定的 -这就是为什么它在 C++14 中被弃用的原因(标记为将来从标准中删除)。
  5. 每次您需要一个新的唯一值时(例如,创建用户时)从列表中获取最后一个值,从列表中删除该值列表,创建用户,并将其保存到数据库。

关于c++ - 将随机整数写入文本文件而不重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46748883/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com