为什么我的程序在for循环后没有打印出正确的值?

时间:2015-12-18 14:50:40

标签: c for-loop

我正在尝试下面的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应保留其起始值,对吗?

5 个答案:

答案 0 :(得分:18)

摘录

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 < end通过在循环体内执行语句false递增到i时,条件30将评估为i++。<登记/> 现在,语句printf("%d\n", i);将被执行,并将打印i 30的值。

答案 1 :(得分:16)

  

我知道在for循环结束时有一个分号会停止for循环迭代多次。

这不完全正确:for循环后的分号变为循环的空体。循环迭代五次,在每次迭代中递增i。大括号中的语句仅在循环结束时执行。

此时i变为30,因为这是您的循环后置条件(即必须的条件为了循环完成,这是真的。这是由printf打印的内容。

答案 2 :(得分:10)

for(i = start; i < end; i++);

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

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

答案 3 :(得分:8)

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

#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,然后将其打印出来。

答案 4 :(得分:2)

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

相关问题