Rand()大小写开关在多次迭代后运行到无穷大

Rand() case switch runs to infinity after multiple iterations

本文关键字:迭代 运行 无穷大 大小写 开关 Rand      更新时间:2023-10-16

我正在编写一个简单的c++脚本,用于在礼品交换中随机分配人员。是的,我知道其他代码甚至excel可能更适合这一点,但这更像是对我c++技能的锻炼。

无论如何,这里有一个我如何生成随机选择的例子:

jakegen:
jake = rand() % 5;
if (jake == tommy || jake == kendra) {
goto jakegen;
}
switch (jake) {
case 0: std::cout << "Jake has: Tommy n";
break;
case 1: std::cout << "Jake has: Kendra n";
break;
case 2: goto jakegen;
break;
case 3: goto jakegen;
break;
case 4: std::cout << "Jake has: Abby n";
break;
}

因此,我在我的范围内生成一个随机数(0-4(,检查它是否重复了以前的选择,如果重复了,则重新滚动,然后第一个与以前的选择不匹配的滚动进入开关,以查看选择是谁。

我还添加了在结束时重新滚动的功能,返回到开始(在初始化变量之后,在滚动任何随机数之前(。

我的问题是,如果我重新滚动几次,在挑选过程中的最后一个人永远不会确定一个数字。它将在滚动一个数字、检查它和重新滚动到无穷大之间循环。

我不知道为什么会发生这种情况,到最后应该总是有一个可用的号码。有什么明显的问题吗?如果需要,我可以发布其余的代码。

在这个代码片段中

jakegen:
jake = rand() % 5;
if (jake == tommy || jake == kendra) {
goto jakegen;
}
switch (jake) {
case 0: std::cout << "Jake has: Tommy n";
break;
case 1: std::cout << "Jake has: Kendra n";
break;
case 2: goto jakegen;
break;
case 3: goto jakegen;
break;
case 4: std::cout << "Jake has: Abby n";
break;
}

如果jake==tommy或jake==kendra,则将控制传递给标签jakegen

因此,控制权似乎从未传递给这些标签

case 0: std::cout << "Jake has: Tommy n";
break;
case 1: std::cout << "Jake has: Kendra n";
break;

在除jake等于4之外的任何其他情况下,控制也被传递到标签jakegen

case 2: goto jakegen;
break;
case 3: goto jakegen;
break;

在所提供的代码片段中,不清楚何时分配变量tommykendra