我正在尝试将随机生成的数字存储到字符串newdeck
中。然而,当我测试它时,所有输出的数字都不是从上面产生的随机数顺序(即代替5,24,10,33,41,它的0,1,2,3,4,5)。用户输入他们想要使用的套牌数量(int deck
)。我想生成随机数numvalue
,并将其存储到我的数组newdeck
中。
有什么想法吗?
答案 0 :(得分:1)
在这一行:
newdeck[numvalue] = numvalue;
你总是将一张特定的牌一遍又一遍地放回原来的位置。更糟糕的是:您访问字符串中不存在的元素。
如果您希望结果在totaldeck
更改:
totaldeck[numvalue] = 0;
(这就是为什么你只得到零 - 你把它们自己放到结果中......),到:
totaldeck[loop] = numvalue;
不需要newdeck
变量。要记住是否已经绘制了一张卡片,您可以尝试这样做:
std::vector<bool> drawn(52 * deck);
for (loop =0; loop < 52*deck; loop++)
{
numvalue = rand()%(52*deck)+1;
if (drawn[numvalue-1])
{
--loop;
continue; //to be explicit
}
else
{
suitvalue = numvalue % 4 + 1;
drawn[numvalue-1] = true;
totaldeck[loop] = numvalue;
//...
此外,使用goto
被认为是非常糟糕的编程习惯。这里避免它的最简单方法是在上面的代码片段中给出。但是,您应该以更易读的方式工作。
此外,您应该将代码划分为较小的函数。您可以更轻松地编写,理解和维护它们。