如何重置 rand() 函数 C++
how to reset rand() function c++
下午好。
我正在做一个包含四个按钮的测验。它们包含从文本文件中随机选择的一行文本。当我使用 rand() 函数调用 4 个整数时,问题就开始了,该函数从
1-5。知道 rand() 函数可以选择相同的数字,我这样编码:
if (random4 == random1 || random4 == random2 || random4 == random3) {
if (random4 == 5) {
while (random4 == random1 && random4 == random2 && random4 == random3 ||
random4 != 5) {
random4--;
}
return Button4Making();
} else {
while (random4 == random1 && random4 == random2 && random4 == random3) {
random4++;
}
return Button4Making();
}
}
但现在我的程序运行良好但经常崩溃。
我假设我需要设置一个限制或类似的东西,但我不知道该怎么做。
函数:
void game_frame::Button1Making() {
srand(time(NULL));
int bla = 0;
string rading;
ifstream object(
"C:\Users\Dzemail\OneDrive\Desktop\database\odgovori.dat");
while (bla != random1 && getline(object, rading)) {
++bla;
}
if (bla == random1) {
button1 = new wxButton(main_panel1, wxID_ANY, rading, wxPoint(10, 10),
wxSize(150, 50));
} else {
button1 = new wxButton(main_panel1, wxID_ANY, "Error", wxPoint(10, 10),
wxSize(150, 50));
}
}
void game_frame::Button2Making() {
srand(time(NULL));
int bla = 0;
if (random2 == random3 || random2 == random4 || random2 == random1) {
if (random2 == 5) {
while (random2 == random1 && random2 == random4 && random2 == random3) {
random2--;
}
return Button2Making();
} else {
while (random2 == random1 && random2 == random4 && random2 == random3 ||
random2 != 5) {
random2++;
}
return Button2Making();
}
} else {
string rading;
ifstream object(
"C:\Users\Dzemail\OneDrive\Desktop\database\odgovori.dat");
while (bla != random2 && getline(object, rading)) {
++bla;
}
if (bla == random2) {
button2 = new wxButton(main_panel1, wxID_ANY, rading, wxPoint(200, 10),
wxSize(150, 50));
} else {
button2 = new wxButton(main_panel1, wxID_ANY, "Error", wxPoint(200, 10),
wxSize(150, 50));
}
}
}
void game_frame::Button3Making() {
srand(time(NULL));
int bla = 0;
string rading;
ifstream object(
"C:\Users\Dzemail\OneDrive\Desktop\database\odgovori.dat");
while (bla != random3 && getline(object, rading)) {
++bla;
}
if (bla == random3) {
button3 = new wxButton(main_panel1, wxID_ANY, rading, wxPoint(400, 10),
wxSize(150, 50));
} else {
button3 = new wxButton(main_panel1, wxID_ANY, "Error", wxPoint(400, 10),
wxSize(150, 50));
}
}
void game_frame::Button4Making() {
srand(time(NULL));
int bla = 0;
if (random4 == random1 || random4 == random2 || random4 == random3) {
if (random4 == 5) {
while (random4 == random1 && random4 == random2 && random4 == random3 ||
random4 != 5) {
random4--;
}
return Button4Making();
} else {
while (random4 == random1 && random4 == random2 && random4 == random3) {
random4++;
}
return Button4Making();
}
} else {
string rading;
ifstream object(
"C:\Users\Dzemail\OneDrive\Desktop\database\odgovori.dat");
while (bla != random4 && getline(object, rading)) {
++bla;
}
if (bla == random4) {
button4 = new wxButton(main_panel1, wxID_ANY, rading, wxPoint(600, 10),
wxSize(150, 50));
} else {
button4 = new wxButton(main_panel1, wxID_ANY, "Error", wxPoint(600, 10),
wxSize(150, 50));
}
}
}
听起来您想要从列表中随机选择项目,但不要重复。一种简单的方法是打乱列表,然后从打乱的列表中读出项目。此页面描述了执行此操作的方法:https://www.cplusplus.com/forum/general/207328/
在您的情况下,您可以创建一个包含整数的列表,例如 [1, 2, 3, 4],然后打乱列表,给您一些排列,例如[2, 4, 1, 3]。这样可以确保您没有重复。
下午好。 我正在做一个包含四个按钮的测验。它们包含从文本文件中随机选择的一行文本。当我使用 rand() 函数调用 4 个整数时,问题就开始了,该函数从 1-5。知道 rand() 函数可以选择相同的数字,我这样编码:
if (random4 == random1 || random4 == random2 || random4 == random3) {
if (random4 == 5) {
while (random4 == random1 && random4 == random2 && random4 == random3 ||
random4 != 5) {
random4--;
}
return Button4Making();
} else {
while (random4 == random1 && random4 == random2 && random4 == random3) {
random4++;
}
return Button4Making();
}
}
但现在我的程序运行良好但经常崩溃。 我假设我需要设置一个限制或类似的东西,但我不知道该怎么做。
函数:
void game_frame::Button1Making() {
srand(time(NULL));
int bla = 0;
string rading;
ifstream object(
"C:\Users\Dzemail\OneDrive\Desktop\database\odgovori.dat");
while (bla != random1 && getline(object, rading)) {
++bla;
}
if (bla == random1) {
button1 = new wxButton(main_panel1, wxID_ANY, rading, wxPoint(10, 10),
wxSize(150, 50));
} else {
button1 = new wxButton(main_panel1, wxID_ANY, "Error", wxPoint(10, 10),
wxSize(150, 50));
}
}
void game_frame::Button2Making() {
srand(time(NULL));
int bla = 0;
if (random2 == random3 || random2 == random4 || random2 == random1) {
if (random2 == 5) {
while (random2 == random1 && random2 == random4 && random2 == random3) {
random2--;
}
return Button2Making();
} else {
while (random2 == random1 && random2 == random4 && random2 == random3 ||
random2 != 5) {
random2++;
}
return Button2Making();
}
} else {
string rading;
ifstream object(
"C:\Users\Dzemail\OneDrive\Desktop\database\odgovori.dat");
while (bla != random2 && getline(object, rading)) {
++bla;
}
if (bla == random2) {
button2 = new wxButton(main_panel1, wxID_ANY, rading, wxPoint(200, 10),
wxSize(150, 50));
} else {
button2 = new wxButton(main_panel1, wxID_ANY, "Error", wxPoint(200, 10),
wxSize(150, 50));
}
}
}
void game_frame::Button3Making() {
srand(time(NULL));
int bla = 0;
string rading;
ifstream object(
"C:\Users\Dzemail\OneDrive\Desktop\database\odgovori.dat");
while (bla != random3 && getline(object, rading)) {
++bla;
}
if (bla == random3) {
button3 = new wxButton(main_panel1, wxID_ANY, rading, wxPoint(400, 10),
wxSize(150, 50));
} else {
button3 = new wxButton(main_panel1, wxID_ANY, "Error", wxPoint(400, 10),
wxSize(150, 50));
}
}
void game_frame::Button4Making() {
srand(time(NULL));
int bla = 0;
if (random4 == random1 || random4 == random2 || random4 == random3) {
if (random4 == 5) {
while (random4 == random1 && random4 == random2 && random4 == random3 ||
random4 != 5) {
random4--;
}
return Button4Making();
} else {
while (random4 == random1 && random4 == random2 && random4 == random3) {
random4++;
}
return Button4Making();
}
} else {
string rading;
ifstream object(
"C:\Users\Dzemail\OneDrive\Desktop\database\odgovori.dat");
while (bla != random4 && getline(object, rading)) {
++bla;
}
if (bla == random4) {
button4 = new wxButton(main_panel1, wxID_ANY, rading, wxPoint(600, 10),
wxSize(150, 50));
} else {
button4 = new wxButton(main_panel1, wxID_ANY, "Error", wxPoint(600, 10),
wxSize(150, 50));
}
}
}
听起来您想要从列表中随机选择项目,但不要重复。一种简单的方法是打乱列表,然后从打乱的列表中读出项目。此页面描述了执行此操作的方法:https://www.cplusplus.com/forum/general/207328/
在您的情况下,您可以创建一个包含整数的列表,例如 [1, 2, 3, 4],然后打乱列表,给您一些排列,例如[2, 4, 1, 3]。这样可以确保您没有重复。