【问题标题】:Nested loop printing multiple " " on each line instead of one " " on each line嵌套循环在每一行上打印多个“”,而不是在每行上打印一个“”
【发布时间】:2021-12-05 23:08:57
【问题描述】:

例如,我无法理解为什么会打印以下代码:

在我的脑海中,我认为它会打印出类似的内容:

每行有一个井号。

似乎计数器在内部循环中每次都从 0 开始,然后每次通过更新的值检查条件,而不是从更新的值开始并检查条件。

顺便说一句,我确实希望它打印出它的作用,我只是不明白它的作用背后的逻辑。我认为“变量++”是更新变量然后检查条件。

如果你能帮忙,谢谢!!!

代码如下:

 int main(void)

{
   int h; 
   int c;
   int w;
   do
  {
    h = get_int("Positive integer: ");
  }
    while (h < 1 || h > 8);

for (c = 0; c < h; c++)
{     
    for (w = 0; w <=c; w++)
    {
        printf("#");
    }
    printf("\n");

【问题讨论】:

  • 第一个循环在打印\n 之前首先执行嵌套循环,这会导致在一行中打印多个。您可以修改它以在嵌套循环中打印printf("#\n")。除此之外 - 对于嵌套循环,通过让它们打印索引来最容易理解它们,例如printf("%d %d", w,c); 应该会告诉你循环是如何工作的。

标签: nested-loops


【解决方案1】:

在内部循环中,c每改变一次值,w又被定义为0。

第一个外循环:c= 0


1stInnerLoop:    w = 0 -> is w<= c ? -> yes -> printf #

第二个外循环:c = 1


1stInnerLoop:    w = 0 -> (is w<= c ?) -> yes printf #
2ndInnerLoop:    w = 1 -> (is w<= c ?) -> yes printf #

第三个外循环:c = 2


1stInnerLoop:    w = 0 -> (is w<= c ?) -> yes printf #
2ndInnerLoop:    w = 1 -> (is w<= c ?) -> yes printf #
3rdInnerLoop:    w = 2 -> (is w<= c ?) -> yes printf #

等等……

【讨论】:

  • "在内层循环中,c每改变一次值,w又被定义为0。"好吧,这是我不知道的。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-16
  • 1970-01-01
  • 2016-10-16
  • 1970-01-01
  • 1970-01-01
  • 2021-01-30
  • 1970-01-01
相关资源
最近更新 更多