【问题标题】:Why doesn't my program print the right value after a for loop? [closed]为什么我的程序在 for 循环后不打印正确的值? [关闭]
【发布时间】:2015-12-18 14:50:40
【问题描述】:

我正在尝试下面的 C 代码:

#include <stdio.h>

int main()
{
    int i=10;
    int start=25;
    int end = 30;
    for(i = start; i < end; i++);
    {
        printf("%d\n", i);
    }
}

我知道 for 循环的末尾有一个分号,它会停止 for 循环多次迭代。但我得到输出'30',而不是'25'。为什么我会得到这个结果?变量i 应该保留它的起始值,对吧?

【问题讨论】:

  • i25 开始,并增加5 次。然后将是30....
  • 谢谢大家。每个 cmets 都非常有帮助。
  • 这个问题实际上是问“为什么 for 循环计数”(如预期的那样)。您可能想阅读 C 书籍中关于循环的章节。
  • 为什么这个问题有 8 个赞?

标签: c for-loop


【解决方案1】:
for(i = start; i < end; i++);

该代码表示​​i25。循环在i&lt;30 时继续。 然后在循环之后,i 将是,如您所写,30

在循环的末尾放一个分号并不会停止循环:它会被执行。 在您的情况下,{} 仅在主函数内打开不同的scope

【讨论】:

    【解决方案2】:

    sn-p

    for(i = start; i < end; i++);
    {
         printf("%d\n", i);
    }  
    

    等价于

    for(i = start; i < end; i++);
    printf("%d\n", i);  
    

    进一步扩展

    for(i = start; i < end;)
    {
        i++;   // This statement will execute till i < 30
    }
    printf("%d\n", i);   
    

    条件i &lt; end 将评估为false,而i 将通过在循环体内执行语句i++ 而递增到30
    现在,语句printf("%d\n", i); 将被执行并打印i 的值30

    【讨论】:

      【解决方案3】:

      我知道 for 循环末尾有一个分号,它会停止 for 循环多次迭代。

      这并不完全正确:for 循环之后的分号变成循环的空体。循环迭代五次,每次迭代递增i。花括号中的语句只有在循环结束时才会执行。

      此时i 变为30,因为这是您循环的后置条件(即必须为真的条件才能使循环结束)。这就是printf 打印的内容。

      【讨论】:

        【解决方案4】:
        for(i = start; i < end; i++);
        

        此循环将迭代5 次,直到i 等于end,即30。在 1st 迭代之后它不会停止。

        由于; 以下printf 不是循环体的一部分,但; 并不意味着循环将迭代1 时间。它将迭代直到条件为true,但循环体不包含除;以外的任何内容。

        【讨论】:

          【解决方案5】:

          由于冒号,您的程序现在相当于:

          #include <stdio.h>
          
          int main()
          {
                  int i=10;
                  int start=25;
                  int end = 30;
          
                  for(i = start; i < end; i++)
                  {
                          //do nothing
                  }
          
                  printf("%d\n", i);
          
          }
          

          您的循环将i 移动到30,然后将其打印出来。

          【讨论】:

            【解决方案6】:

            大括号内的代码(for 下方)不是 for 循环的一部分。 换句话说,由于for 语句末尾包含分号,您的循环没有主体。

            【讨论】:

              猜你喜欢
              • 2021-02-26
              • 1970-01-01
              • 2021-12-29
              • 2019-12-23
              • 1970-01-01
              • 2023-01-16
              • 2021-09-24
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多