【问题标题】:confused with for loop incrementing rule与 for 循环递增规则混淆
【发布时间】:2020-07-01 09:18:09
【问题描述】:

你能告诉我为什么这个程序的输出是ABBBCDE吗?

这是我的考试题。

#include <stdio.h>

int main (void)
{
    int i;
    for (i = 0; i < 2; i++)
    {
        printf ("A");
        for (; i < 3; i++)
        printf ("B");
        printf ("C");
        for (; i < 4; i++)
        printf ("D");
        printf ("E");
    }
    return 0;
}

【问题讨论】:

  • 这对我来说似乎很明显,所以很难解释。如果你说认为输出应该是什么,那么解释你错在哪里会更容易。
  • 在一张纸上写下i = 0。然后逐行浏览代码,添加字符,并在每次i 递增时更新您记下的值。
  • @Adam 我撤回了您的编辑。你不应该通过编辑问题来“解释”代码。
  • @Bathsheba - 您是说您提供的链接中接受的答案不正确吗?
  • @Turuudo 请不要使用不相关的标签,尤其是不要获得更多的人气——这显然是误用!标签用于指定问题的内容。如果您对 C 问题使用 C++ 标签,您可能会得到在 C 中不起作用的 C++ 答案。

标签: c for-loop increment


【解决方案1】:
int
main (void)
{
  int i;
  for (i = 0; i < 2; i++)
    {
      printf ("A");
      for (; i < 3; i++)
      printf ("B");
      printf ("C");
      for (; i < 4; i++)
      printf ("D");
      printf ("E");
    }
  return 0;
}

相同
int
main (void)
{
  int i;
  for (i = 0; i < 2; i++)
    {
      printf ("A"); // prints once
      for (; i < 3; i++)
      {
          printf ("B"); // i = 0 at beginning, and loops until i = 2 => 3 times
      }
      printf ("C"); // prints once
      for (; i < 4; i++) 
      {
          printf ("D"); // i = 3 at beginning, so it prints once
      }
      printf ("E"); // prints once
    } // next loop, i is already 4, which is more than 2, so first loop stops
  return 0;
}

请不要这样写生产代码。

【讨论】:

    【解决方案2】:

    如果您正确缩进代码,它将帮助您了解发生了什么:

    #include <stdio.h>
    
    int main(void)
    {
        int i;
        for (i = 0; i < 2; i++)
        {
            printf("A");        // prints A 1 time, i is still 0
            for (; i < 3; i++)  // prints B 3 times, i will now be 3, the cycle ends
                printf("B");  
            printf("C");        // prints C 1 time, this is not in any inner loop
            for (; i < 4; i++)  // prints D once, as i is 3, the cycle only runs once
                printf("D");
            printf("E");        // again prints E once
        }                       // as i is 4 the cycle will end, the condition is i < 2
        return 0;              
    }
    

    【讨论】:

      【解决方案3】:

      因为你有一个 for 循环来检查 i 是否小于三。它从零开始,零小于三,所以它打印一次 B,然后它加一到 i,i 变成一,它仍然小于三,所以它打印另一个 B。然后它把一加到 i,变成二,仍然小于零,这使得它第三次打印 B。然后它在 i 上加了一个,使其为 3,不小于 3,所以它通过键入 C 继续程序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-16
        • 2021-03-11
        • 1970-01-01
        • 1970-01-01
        • 2018-04-30
        • 2016-11-24
        • 2020-02-06
        相关资源
        最近更新 更多