这绝对是一个愚蠢的问题,已经多次回答,但我真的很困惑,也无法找到如何谷歌。
我在软件开发方面有大约4年的经验,但那件事让我不知所措:
UNIX_TIMESTAMP()
结果是
int x1 = 2, x2 = 5;
int y1 = 2, y2 = 5;
for (; x1 <= x2; x1++) {
for (; y1 <= y2; y1++) {
cout << x1 << " : " << y1 << endl;
}
}
但我期待看到:
2 : 2
2 : 3
2 : 4
2 : 5
我的意思是 x1 甚至没有更新过一次。
我认为这与外部范围和编译器优化有关。请澄清我。
答案 0 :(得分:1)
您没有重置y1。
int x1 = 2, x2 = 5;
int y2 = 5;
for (; x1 <= x2; x1++) {
for (y1 = 2; y1 <= y2; y1++) { // This resets y1 every time the loop starts
cout << x1 << " : " << y1 << endl;
}
}
或者
int x1 = 2, x2 = 5;
int y1 = 2, y2 = 5;
for (; x1 <= x2; x1++) {
y1 = 2;
for (; y1 <= y2; y1++) {
cout << x1 << " : " << y1 << endl;
}
}
答案 1 :(得分:0)
这就是你应该像下面这样对for
循环进行编码以避免这种副作用的原因,这样你就不应该忘记在这种情况下重新初始化的计数器变量y1
。同时声明并初始化计数器变量外侧for
循环不会给你带来任何好处。所以总是尽量避免这种实现,并遵循以下方法:
int x2 = 5;
int y2 = 5;
for (int x1 = 2; x1 <= x2; x1++) {
for (int y1 = 2; y1 <= y2; y1++) {
cout << x1 << " : " << y1 << endl;
}
}
答案 2 :(得分:0)
此行为是正确的。
在嵌套循环之后,你再也没有设置y1=2;
,因此cout << x1 << ":" << y1 endl
永远不会再次运行,因为当嵌套循环结束时y1为6,因此不符合条件(y1 <= y2
)在嵌套循环中给出。
编辑:有关正常工作的代码,请参阅user9335240
中的评论答案 3 :(得分:0)
问题在于inner for-loop
。
在第一次迭代时(当x1
为2
时),您将获得打印结果,即
2 : 2
2 : 3
2 : 4
2 : 5
因为,你没有重新初始化y2
变量,因此,在内循环的所有后续迭代中,条件y1 <= y2
被评估为false
(此时y2
在这种情况下是6
)。因此,您没有按预期获得输出。
您可以按照修改后的代码进行确认:
int x1 = 2, x2 = 5;
int y1 = 2, y2 = 5;
for (; x1 <= x2; x1++)
{
for (; y1 <= y2; y1++)
{
cout << x1 << " : " << y1 << endl;
}
cout<<"In outer loop with x1="<<x1<<" and y1="<<y1<<endl;
}
您将获得以下输出:
Point 1: In outer loop with x1=2 and y1=2
2 : 2
2 : 3
2 : 4
2 : 5
Point 2: In outer loop with x1=2 and y1=6
Point 1: In outer loop with x1=3 and y1=6
Point 2: In outer loop with x1=3 and y1=6
Point 1: In outer loop with x1=4 and y1=6
Point 2: In outer loop with x1=4 and y1=6
Point 1: In outer loop with x1=5 and y1=6
Point 2: In outer loop with x1=5 and y1=6
要获得预期的输出,请在内循环中将y1
重新初始化为2
。即将内循环从for (; y1 <= y2; y1++)
更改为for (y1 = 2; y1 <= y2; y1++)
答案 4 :(得分:0)
你应该重置y1的值,它可以通过上述步骤完成,或者像这样:
int x1 = 2, x2 = 5;
int y2 = 5;
for (; x1 <= x2; x1++) {
for (; y1 <= y2; y1++) { // This resets y1 every time the loop starts
cout << x1 << " : " << y1 << endl;
}
y1 = 2;
}