嵌套循环行为怪异
Nested loop acting weird
本文关键字:嵌套循环 更新时间:2023-10-16
编辑:张贴一切,因为它真的很奇怪。
using namespace std;
int main()
{
int doors = -1;
int jumper = 1;
bool isOpen[100];
string tf;
for(int i = 0 ; i < 100; i++){
isOpen[i] = false;
}
while(jumper < 100){
while(doors < 100){
if(isOpen[doors + jumper] == true){
isOpen[doors + jumper] = false;
}
else{
isOpen[doors + jumper] = true;
}
doors += jumper;
cout << doors << endl;
}
doors = -1;
jumper+=1;
}
for(int i = 0; i < 100; i++){
if(isOpen[i]){
tf = "open";
}
else{
tf = "closed.";
}
cout << "Door " << i << " is " << tf << endl;
}
return 0;
}
我在这段代码中遇到了一个非常奇怪的问题。它应该遍历一个包含100个元素的数组。0 - 99分,1分,2分,3分等等。然而,在a = 10之后,它飙升到266。有人能告诉我为什么吗?
编辑:只有当for循环被注释掉时才会出现这个问题。当它留在代码中,它做同样的事情,但直到19才发生。如果我也注释掉"字符串tf;",它将继续在99处循环。这都是基于门的数量。我不确定为什么这两个都应该是循环的一个因素,这两个都没有连接。
根据你的描述,你应该这样做:
for(int adv = 1, i = 0; adv < 100;)
{
// i is array index (your b) -> use it somehow:
doSomething(arr[i]);
i += adv;
if(i >= 100)
{
i = 0;
adv++;
}
}
你得到奇怪的行为(包括266值)的(可能的)原因是你的代码溢出了缓冲区。当b
足够高时(比如99),你将写入isOpen[b + a]
,它将是100或更高(如果a
是1,则为100,这只是第一次迭代,以后的迭代将会更进一步)。如果编译器在整数之前分配isOpen
,您将覆盖它们。
相关文章:
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 了解嵌套循环打印星号图案
- 无法掌握嵌套循环的写作技巧
- 在 c++ 中实现嵌套循环的更短方法吗?
- 从嵌套循环中的 std::list 中删除将返回访问冲突
- 毕达哥拉斯三重嵌套循环误解
- T(n) 表示嵌套循环
- 2 个嵌套循环的时间复杂度
- 嵌套循环背后的逻辑
- 使用 %s C++嵌套循环
- 嵌套循环和重复迭代器
- 如何在 c++ 下使用嵌套循环和正则表达式降低时间复杂度?
- C++在乘法图中放置随机值(嵌套循环)
- 如何使用 OpenMP 减少嵌套循环?
- 为什么使用 2 个嵌套循环 O(n^2) 复杂度来解决二和问题,当只改变循环计数器逻辑时运行得更快?
- 学习嵌套循环C++与示例混淆
- 如何在CUDA中嵌套循环
- std::vector上的嵌套循环
- 具有动态数组分配的OpenMP嵌套循环
- 两个嵌套循环的运行时间复杂性:二次型还是线性