解释一下这个嵌套的 for 循环?
Explain this nested for loop?
这是创建一个宽度和高度已经设置好的正方形,并使用破折号将其打印到输出中,并且运行完美;但我似乎并不完全理解第二个和第三个循环在做什么以及它的 运行。
- (void)draw {
for (int w = 1; w <= width; w++) {
printf("-");
}
***
for (int h = 0; h <= height; h++) {
printf("\n");
printf("|");
for (int space = 0; space <= width; space++) {
printf(" ");
}
printf("|");
}
***
for (int w = 1; w <= width; w++) {
if (w == 1) {
printf("\n");
}
printf("-");
if (w == width)
printf("\n");
}
}
}
"\n" 表示新行,因此 second 循环开始新行然后打印管道(竖线)。
for (int h = 0; h <= height; h++) {
printf("\n");
printf("|");
third 循环打印出一堆空格。
for (int space = 0; space <= width; space++) {
printf(" ");
second 循环然后为框的右边缘打印另一个管道。
printf("|");
second 循环然后 "loops" 并重复多次。
最后一个循环打印一个新行,然后打印一串破折号“-”作为底边。
第一个循环打印出顶部的水平虚线。
下一个循环为每行打印两条垂直虚线,首先打印左边的虚线,然后遍历宽度和打印空格,然后打印右边的虚线。对于正方形高度的每一行都会发生这种情况。
最后一个循环最终打印出底线的破折号。
你问的中间循环基本上画了盒子的左右两边,一个'|'一次,从上到下...打印第一个 |在左侧,然后是一堆空格,然后是第一个 |在右侧。然后它向下移动到下一行并再次重复。
可能更容易形象化:
在第一个循环之后你会得到类似这样的东西(假设宽度 = 15)
---------------
一旦第二个开始,它会插入一个换行符并在左侧打印一个竖线 |
,留下:
---------------
|
然后内部循环插入宽度为您的宽度的空格,(此处表示为 o
)留下您:
---------------
|ooooooooooooooo
插入空格后,右侧绘制了另一个管道,剩下的是:
---------------
| |
这会持续 height
次,直到您剩下(假设高度 = 5):
---------------
| |
| |
| |
| |
| |
最后,最后一个循环打印底部,就像顶部一样:
---------------
| |
| |
| |
| |
| |
---------------
这是创建一个宽度和高度已经设置好的正方形,并使用破折号将其打印到输出中,并且运行完美;但我似乎并不完全理解第二个和第三个循环在做什么以及它的 运行。
- (void)draw {
for (int w = 1; w <= width; w++) {
printf("-");
}
***
for (int h = 0; h <= height; h++) {
printf("\n");
printf("|");
for (int space = 0; space <= width; space++) {
printf(" ");
}
printf("|");
}
***
for (int w = 1; w <= width; w++) {
if (w == 1) {
printf("\n");
}
printf("-");
if (w == width)
printf("\n");
}
}
}
"\n" 表示新行,因此 second 循环开始新行然后打印管道(竖线)。
for (int h = 0; h <= height; h++) {
printf("\n");
printf("|");
third 循环打印出一堆空格。
for (int space = 0; space <= width; space++) {
printf(" ");
second 循环然后为框的右边缘打印另一个管道。
printf("|");
second 循环然后 "loops" 并重复多次。
最后一个循环打印一个新行,然后打印一串破折号“-”作为底边。
第一个循环打印出顶部的水平虚线。
下一个循环为每行打印两条垂直虚线,首先打印左边的虚线,然后遍历宽度和打印空格,然后打印右边的虚线。对于正方形高度的每一行都会发生这种情况。
最后一个循环最终打印出底线的破折号。
你问的中间循环基本上画了盒子的左右两边,一个'|'一次,从上到下...打印第一个 |在左侧,然后是一堆空格,然后是第一个 |在右侧。然后它向下移动到下一行并再次重复。
可能更容易形象化:
在第一个循环之后你会得到类似这样的东西(假设宽度 = 15)
---------------
一旦第二个开始,它会插入一个换行符并在左侧打印一个竖线 |
,留下:
---------------
|
然后内部循环插入宽度为您的宽度的空格,(此处表示为 o
)留下您:
---------------
|ooooooooooooooo
插入空格后,右侧绘制了另一个管道,剩下的是:
---------------
| |
这会持续 height
次,直到您剩下(假设高度 = 5):
---------------
| |
| |
| |
| |
| |
最后,最后一个循环打印底部,就像顶部一样:
---------------
| |
| |
| |
| |
| |
---------------