1
MAX_SIZEの数値を0から9まで生成し、ランダムというベクトルに格納して、同じ桁が2回表示されないようにしました、最大値は10桁です。 コードは動作しているようですが、まれに(または繰り返して開くと)誰かが閉じられるまで作業やロックを停止するようです。 これは乱数の生成と関係がありますが、わかりませんが、私はまだ学習しています。 これは完全なコードは次のとおりです。実行時に乱数リストのジェネレータが動作しない
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <cmath>
#include <ctime>
using namespace std;
vector<int> random;
constexpr int MAX_SIZE = 10; //can be up to 10, try and change it over the limit
int generate() { //generates a casual number between 0 and 9
int a = 0;
a = rand() % 10;
return a;
}
int rand_elem(int a) { //makes sure the arg "int a" is not already contained in the vector<int> random
for (unsigned o = 0; o<MAX_SIZE; ++o)
if (a==random[o]) {
return 1;
break; //returns 1 and interrupts the check if there is a match (aka if there is already that number in the vetcor<int> random
}
return 0; //else returns 0 aka success
}
void random_fill() { //"fills" vector<int> random with different random numbers from 0 to 9
for (unsigned i = 0; i<MAX_SIZE;) {
int num = generate();
if (i==0 || rand_elem(num)==0) { //checks if the newly generated number with generate() doesn't already belong to vector<int> random
random.push_back(num);
++i; //if int num doesn't belong to vector<int> random, it is being added to it and the loop can proceed (++i) until the condition i<4 is met
}
}
}
int main()
try {
if (MAX_SIZE > 10) {
throw (runtime_error("MAX_SIZE too big\n"));
}
srand(time(NULL)); //generates a seed for the random number generator generate() using system time
random_fill();
for (unsigned h = 0; h<random.size(); ++h) //prints the content of the vector
cout<< random[h] << '\t';
} catch (runtime_error& e) { //error catching
cout <<"runtime error: "<< e.what()<<'\n';
return 1;
}
希望これは質問のように、あまりにも冗長いないようですが、私は、サイト上で検索してすべての答えを見つけることができます。 ありがとうございます。