为什么分号不会清空循环体?

时间:2017-05-29 18:24:04

标签: c for-loop

for循环结尾处的分号假设清空正文并创建一个空循环。但为什么这是打印6

void main()
{
    int i;
    for(i=1;i<=5;i++);
    {
        printf("%d\n",i);
    }
}

6 个答案:

答案 0 :(得分:11)

循环体为空,否则会打印12345。但是循环头仍在运行,并且在每次迭代中它增加i。当它达到6而不是<=5时,循环结束。循环后打印ii打印为6。递增i是循环的副作用。

答案 1 :(得分:1)

在循环结束时i将为6,printf执行此操作。

答案 2 :(得分:1)

for循环for(i=1;i<=5;i++);将正好运行5次,将i从1递增到6(即使for循环体是无操作)。因此,在这里:

{
    printf("%d\n",i);
}

程序将打印i的当前值,即6。

答案 3 :(得分:1)

试试这个很有趣

#include <stdio.h>

int main(void)
{
    int i;
    for (i = 1; i <= 5; i++) /* void */;

    /* floating block one */
    {
        int i = 42; /* new i, hides old i */
        printf("%d\n",i);
    }

    /* floating block two */
    {
        printf("%d\n",i);
    }
}

答案 4 :(得分:1)

因为你在null循环之外声明了int,所以该值保存在increment循环之外。

Read more about it here

额外的括号在这里没有做任何事情,因为分号退出循环。

Read more about brackets here.

答案 5 :(得分:1)

很简单:

for(i=1;i<=5;i++);将执行5次,从1到5 然后i = 6结束for循环,然后执行一个新的“scoped”语句:

printf("%d\n",i);

因此打印6