应用于单词数组的随机数范围

Ash*_*rse 0 c++

我是C++的新手.我基本上是自学.我遇到了一个我正在练习的Hangman游戏项目.我的问题是随机字生成.

我知道例如,int n=rand()% 10意味着生成0到10范围内的随机数.

现在在游戏中有一个包含10个单词的10个单词的数组.我感到困惑的是,如果从0到10的数字是随机生成的,那么这将是从11个随机数中选择的.但是,该数组只有10个元素(0-9).

当随机发生器选择10时会发生什么?元素10不存在于数组中,对吗?
那么这段代码应该int n=rand()% 9不是吗?

此外,在游戏中选择所有单词之前,是否可以重复相同的单词?那显然不是理想的.如果可以的话,我该如何防止这种情况?

4pi*_*ie0 5

我知道例如int n = rand()%10意味着生成0到10范围内的随机数.

不完全是.然后生成的范围是[0,9].旁注:在C++ 11中,你应该使用更好的随机数生成器:std :: uniform_int_distribution

#include <random>
#include <iostream>

int main()
{
    std::random_device rd;
    std::mt19937 gen( rd());

    // here (0,9) means endpoints included (this is a call to constructor)
    std::uniform_int_distribution<> dis(0, 9);

    std::cout << dis(gen) << std::endl; // std::endl forces std::cout to
                                        // flush it's content, you may use '\n'
                                        // instead to buffer content  
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果您尝试使用超出范围的索引下标数组,那么它就是名为Undefined Behavior的灾难:

未定义的行为和序列点

C++程序员应该知道的所有常见的未定义行为是什么?