C 为什么结果不是预期的?

C 为什么结果不是预期的?,c,loops,C,Loops,我有一些代码如下: #include <stdio.h> #include <stdlib.h> static counter = 0; static flag = 0; int main() { int number = 3; int i = 0; for(i; i< number; i++) { if(counter >= number) { counter = 0

我有一些代码如下:

#include <stdio.h>
#include <stdlib.h>

static counter = 0;
static flag = 0;

int main()
{
    int number = 3;
    int i = 0;
    for(i; i< number; i++)
    {
        if(counter >= number)
        {
            counter = 0;
            flag = 1;
        }
        counter ++;

        printf("   counter = %u\n", counter);
        printf("   flag = %u\n", flag);

    }



    return 0;
}
#包括
#包括
静态计数器=0;
静态标志=0;
int main()
{
整数=3;
int i=0;
对于(i;i=编号)
{
计数器=0;
flag=1;
}
计数器++;
printf(“计数器=%u\n”,计数器);
printf(“标志=%u\n”,标志);
}
返回0;
}

每次计数器达到3时,标志应为1,但为什么当计数器达到3时,标志仍为0?

因为当
i
变为3时,for中的条件失败,因此从不执行if中的代码。

循环仅运行3次。在上一次迭代中,在
if
测试期间,
计数器的值为2,
number
的值为3。如果测试失败。现在计数器增加到3,这就是打印的内容。

如果您到达
部分,则不会到达


当i=3时,计数器=2并从循环中退出。

在条件后增加
计数器
,因此,如果确定
计数器>=number
,则最大值为2。

,因为下面的代码从未到达,程序退出循环

if(counter >= number)
        {
            counter = 0;
            flag = 1;
        }
因此
counter=3
flag
将保持
0

如果您想在它退出循环时将其设置为
0
,那么只需这样做即可


counter++
位于
if
语句上方,并删除另一个
counter++
(位于if下方)

,因为
i
从未按照代码到达
3
。尝试
i如果我只想循环3次,循环达到第三次,请将标志设置为1?然后您可以将
计数器+++
放在
的旁边。我的意思是在
if
之前尝试
counter++
if(counter>=number)