C++需要if!=随机数的帮助

Dol*_*ver 2 c++ random if-statement

我正在做一个项目,我被困住了.我有两个生成随机数的变量.我想做一个检查,检查以确保变量不是相同的数字,如果是,则重复该过程,直到它们不相同.这是我有的:

num_enemy = 3;

int f =  rand() % num_enemy;
int m =  rand() % num_enemy;

if ( f != m )
{
enemy_ptr[f] -> fire_Weapon();
enemy_ptr[m] -> update_Status();
}
Run Code Online (Sandbox Code Playgroud)

上面的代码不会工作加上我怎么能这样做,如果它的错误它将再次生成随机数?

我不是在寻找答案,只是帮助我确切地做什么.谢谢!

x-x*_*x-x 5

问题是当它到达这一部分时......

if ( f != m )
{
    enemy_ptr[f] -> fire_Weapon();
    enemy_ptr[m] -> update_Status();
}
Run Code Online (Sandbox Code Playgroud)

...变量fm可能具有相同的价值,由于模,让你fire_Weapon()update_Status()功能不会被调用.您将需要循环,直到两个变量具有不同的值.下面的代码应该排除你.

const int num_enemy = 3;
int f = rand() % num_enemy;
int m;

// A do-while loop is guaranteed to be called at least once.
do
{
    m = rand() % num_enemy;
} while ( f == m ); // Repeat the loop if the values are the same

// At this point, f and m will always have different values.
enemy_ptr[f] -> fire_Weapon();
enemy_ptr[m] -> update_Status();
Run Code Online (Sandbox Code Playgroud)

因为您的变量是模数较低的值,所以循环可能必须先运行多次f != m.

此外,如果您希望rand()每次运行游戏时返回的伪随机数序列不同,请通过调用srand( time() )一次对伪随机数生成器播种.如果您希望每次运行游戏时序列保持不变,请保持原样.这可以极大地帮助调试,并且如果您的游戏需要具有确定性,则需要这样做.

阅读更多关于rand()srand()这里:http://www.cplusplus.com/reference/cstdlib/rand/

正如另一个答案中所提到的,C++ 11改进了随机数生成.点击此处了解更多信息:http://www.cplusplus.com/reference/random/