我遇到的以下代码虽然我有C的基本概念。我仍然得到下面代码的逻辑。
循环如何终止以及循环何时终止 - 在什么条件下?
最后counter
变为零,但为什么循环不继续以-1,-2执行而是终止?
代码:
#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
答案 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
作为输出。
下次评估循环的条件时,表达式的值为0
,count
的值设置为-1
。由于表达式的值为0
,因此循环的执行会停止。
答案 3 :(得分:1)
count--是post-decrement。因此,count
的值不会在while
条件下立即递减。之后(在评估while
条件之后)递减。因此,当while
和count = 1
完成时,count--
会继续运行。但是,在输入while
,count 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
。