Rand()大小写开关在多次迭代后运行到无穷大
Rand() case switch runs to infinity after multiple iterations
我正在编写一个简单的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;
在所提供的代码片段中,不清楚何时分配变量tommy
或kendra
。
相关文章:
- 为什么程序在 c++ 中迭代 emtpy 向量时会抛出运行时错误
- 迭代二维矢量时发生运行时错误
- 是什么导致我的循环在第一次迭代中运行得更慢
- 类型不可知的抽象以使用相同的运行时接口处理正向和反向迭代器和范围?
- Rand()大小写开关在多次迭代后运行到无穷大
- C++,弹出调试断言失败窗口,我得到矢量迭代器不兼容的错误运行时
- C :在多迭代器中的Next()和PRAV()的运行时间
- 在满足特定条件时运行迭代C++以存储变量
- 迭代器未按预期运行
- 列表迭代器不可递增?- 运行时错误
- C 迭代器类导致R6025视觉C 的运行时错误
- 是否有类似STD ::累积在迭代器上运行的东西
- 映射/设置迭代器未解除可绑定运行时错误
- C++列出要运行的迭代器
- <algorithm>在同一输入迭代器范围内并排运行两个
- STL 映射迭代器运行时错误
- 列表迭代器不可递增 - 运行时错误
- 根据运行时决策组合不同的迭代器
- 对所有断点运行"breakpoint command list"/迭代断点 [GDB]
- 为什么更改循环迭代顺序会增加运行时间