我正在从一本书中学习C,作者正在解释使用1表示真,0表示使用while循环.他用以下示例代码解释但我无法理解.
INPUT
#include<stdio.h>
int main(void)
{
int n = 3;
while (n)
printf("%2d is true\n", n--);
printf("%2d is false\n", n);
n = -3;
while (n)
printf("%2d is true\n", n++);
printf("%2d is false\n", n);
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
OUTPUT
3 is true
2 is true
1 is true
0 is false
-3 is true
-2 is true
-1 is true
0 is false
Run Code Online (Sandbox Code Playgroud)
可能如果你添加大括号,你可以正确理解代码.
#include<stdio.h>
int main(void)
{
int n = 3;
while (n)
{
printf("%2d is true\n", n--);
}
printf("%2d is false\n", n);
n = -3;
while (n)
{
printf("%2d is true\n", n++);
}
printf("%2d is false\n", n);
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您发布的代码和上面的代码是相同的.如果没有大括号,while则执行后的下一个语句.
这个:
printf("%2d is true\n", n--);
Run Code Online (Sandbox Code Playgroud)
在第一次将继续执行,直到while(n)是错误的.while(n)相当于while(n!=0).while(something)只有在某事为0时才是假的.
因此,当n=3第一个循环中的条件为真,然后n--(n=n-1)使n2为2时,条件为真,依此类推.当n为0时,条件变为假并退出循环.然后程序打印错误,类似地执行第二个while循环.
在C中有几个地方,其中任何表达式都使用布尔值来决定程序的流程:
iffor,while以及do-while?-:在消耗布尔值的所有这些地方,!= 0都会添加隐式,因此
while (n)
Run Code Online (Sandbox Code Playgroud)
手段
while (n != 0)
Run Code Online (Sandbox Code Playgroud)
因此,考虑除零以外的所有值true.
语言中还有其他位置由逻辑表达式生成布尔值,例如逻辑NOT !运算符.在这种情况下,所产生的值被限制在0,1设定.具体来说,零的逻辑NOT是1.