2015-05-23 146 views
0

这是创建一个正方形的宽度和高度已经设置和打印出来输出使用破折号,并且它运行完美;但我似乎并没有完全理解第二和第三回路正在做什么,并表明它正在运行。解释这个嵌套for循环?

- (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"); 
     } 
    } 
} 

回答

0

你问的中间循环基本上是画出盒子的左右侧,一个'|'一次从上到下......打印第一个|在左边,然后是一堆空格,然后是第一个|在右侧。然后它下移到下一行并重复一遍。

它可能更容易进行可视化:

你留下了这样的第一循环后(假设宽度= 15)

--------------- 

一旦第二个开始,它插入一个换行符打印管|在左边,留给你:

--------------- |

然后内环inser为您的宽度是量,(在这里表示为o)TS空间让你有这样的:

--------------- 
|ooooooooooooooo 

的空间后已被插入,另一管绘制在右边,你留下要:

--------------- 
|    | 

这样下去height时间留给你的,直到(假设高度= 5):

--------------- 
|    | 
|    | 
|    | 
|    | 
|    | 

最后,最后一个循环的打印底部,就像顶部:

--------------- 
|    | 
|    | 
|    | 
|    | 
|    | 
--------------- 
+0

谢谢你,真的很喜欢这个细分的解释。 –

1

“\ n”个意味着新的行,以便在第二循环开始然后一个新的行打印的管(竖线)。

for (int h = 0; h <= height; h++) { 
    printf("\n"); 
    printf("|"); 

第三循环打印一堆空格。

for (int space = 0; space <= width; space++) { 
    printf(" "); 

第二环然后再打印另一管的框的右边缘。

printf("|"); 

第二环路,则“循环”和做这一切再次一堆倍。

最后一个循环打印出一条新的线,然后打印出一条破折号“ - ”作为底边。

0

第一个循环打印出顶部水平虚线。

下一个循环为每一行打印两条垂直虚线,首先打印左边的破折号,然后循环显示宽度并打印空格,然后打印右边的破折号。这发生在正方形高度的每一行上。

最后最后一个循环打印底线的短划线。