嵌套循环行为怪异
Nested loop acting weird
编辑:发布所有内容,因为它真的很奇怪。
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 一个,然后拖,然后三,等等。但是,在 a = 10 之后,它会上升到 266。
谁能告诉我为什么?
编辑:
只有在 for 循环被注释掉时才会出现此问题。当它留在代码中时,它会做同样的事情,但直到 19 才会发生。
如果我也注释掉 "string 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
,你将覆盖它们。
编辑:发布所有内容,因为它真的很奇怪。
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 一个,然后拖,然后三,等等。但是,在 a = 10 之后,它会上升到 266。 谁能告诉我为什么?
编辑: 只有在 for 循环被注释掉时才会出现此问题。当它留在代码中时,它会做同样的事情,但直到 19 才会发生。 如果我也注释掉 "string 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
,你将覆盖它们。