我是C++的新手.我基本上是自学.我遇到了一个我正在练习的Hangman游戏项目.我的问题是随机字生成.
我知道例如,int n=rand()% 10意味着生成0到10范围内的随机数.
现在在游戏中有一个包含10个单词的10个单词的数组.我感到困惑的是,如果从0到10的数字是随机生成的,那么这将是从11个随机数中选择的.但是,该数组只有10个元素(0-9).
当随机发生器选择10时会发生什么?元素10不存在于数组中,对吗?
那么这段代码应该int n=rand()% 9不是吗?
此外,在游戏中选择所有单词之前,是否可以重复相同的单词?那显然不是理想的.如果可以的话,我该如何防止这种情况?
我知道例如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的灾难: