while循环如何在这里工作?

时间:2015-06-06 05:20:14

标签: c termination

我遇到的以下代码虽然我有C的基本概念。我仍然得到下面代码的逻辑。

  1. 循环如何终止以及循环何时终止 - 在什么条件下?

  2. 最后counter变为零,但为什么循环不继续以-1,-2执行而是终止?

  3. 代码:

    #include <stdio.h>
    
    void func(void);
    static int count = 5;
    int main()
    {
        while (count--)
        {
            func();
        }
        return 0;
    }
    
    void func(void)
    {
        static int i = 5;
        i++;
        printf("i is %d and count is %d\n", i, count);
    }
    

    输出:

    i is 6 and count is 4
    i is 7 and count is 3
    i is 8 and count is 2
    i is 9 and count is 1
    i is 10 and count is 0
    

7 个答案:

答案 0 :(得分:1)

while(term)

当term(条件/变量/函数)求值为0时,while循环终止。

count--返回count的值然后递减它。

所以当count--返回零循环终止时。当count具有值0时将是哪个。 另见评论。

C将0视为false并将其作为true,因此当条件计算为false(0)时,while循环将中断。

答案 1 :(得分:1)

这里循环在count变为0时终止,因为在C中,0在Java(布尔类型)中表现为false,因此条件为false。循环退出。

当count =

0 - 循环条件为假

非0 - 循环条件为真

答案 2 :(得分:1)

while循环的条件count--在评估表达式之前1的值为count时评估为1。评估表达式的副作用是count的值减去1,即其值变为0

这就是你看

的原因
i is 10 and count is 0

作为输出。

下次评估循环的条件时,表达式的值为0count的值设置为-1。由于表达式的值为0,因此循环的执行会停止。

答案 3 :(得分:1)

count--是post-decrement。因此,count的值不会在while条件下立即递减。之后(在评估while条件之后)递减。因此,当whilecount = 1完成时,count--会继续运行。但是,在输入whilecount becomes 0之后,下次条件评估到达时,while会中断。

简单来说,count is equal to 5并且您希望它运行5次迭代(在简单流程下),因此它运行4 to 0。如果您想要其他方式,您可以这样做,试试这个并亲自看看

while( 0 != count )
{
   func() ;
   count-- ;
}

答案 4 :(得分:0)

在C和C ++中,如果使用表达式代替条件,则任何导致零(0)的表达式都将被计算为false。看 -

if(0){
  //never reached; never executed
}  

同样,表达式中的任何非零值都将计算为true -

if(5){
   //always reached and executed
}  

此事实适用于while-loop -

中的条件
int i = 5;
while(i){
  //do something

  i--;
}

答案 5 :(得分:0)

问题1:循环如何终止以及循环何时终止于什么条件。

ans: while循环以count = 5开始。循环条件满足,因为 count非零 。但是立即计数值由于count--,因此减1并变为count = 4。所以输出是

  

我是6,数是4

Upto count = 1,它继续.Count = 1也满足循环条件。但马上计数 - 发生,现在计数= 0。所以输出是

  

我是10,计数是0

因此,下一个检查循环条件不满足(Count = 0)并且循环终止。

问题2:最后一个计数器变为零,但为什么循环不会继续存在-1,而不是它终止?

ans:当循环条件变为零时,它会创建一个FALSE条件。所以它会在那里终止。

注意:条件块中只有零值才会终止循环。如果它小于零则不会。

检查一下。

void func(void);
static int count = -5;
main()
{
    while (count++)
    {
        func();
    }
    return 0;
}

void func(void)
{
    static int i = 5;
    i++;
    printf("i is %d and count is %d\n", i, count);
}

将输出创建为

i is 6 and count is -4
i is 7 and count is -3
i is 8 and count is -2
i is 9 and count is -1
i is 10 and count is 0

答案 6 :(得分:0)

while表达式是 boolean ;因此,整数表达式count--被隐式转换为布尔值,使得任何非零值为true,零为false