我正在从一本书中学习C,作者正在解释使用1表示true,0表示使用while循环表示false。他用以下示例代码解释但我无法理解。
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;
}
输出
3 is true
2 is true
1 is true
0 is false
-3 is true
-2 is true
-1 is true
0 is false
答案 0 :(得分:7)
如果你添加大括号,你可以正确理解代码。
#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;
}
您发布的代码和上述代码相同。如果没有大括号,则while
之后的下一个语句将被执行。
此:
printf("%2d is true\n", n--);
在第一个while中将继续执行,直到while(n)
为假。 while(n)
相当于while(n!=0)
。只有当某些东西为0时,while(something)
才为假。
因此,当n=3
第一个循环中的条件为真,然后n--
(n=n-1
)使n
2为2时,条件为真,依此类推。当n
为0时,条件变为false并退出循环。然后程序打印为false,同样执行第二个while
循环。
答案 1 :(得分:5)
在C中有几个地方,任何表达式都使用布尔值来决定程序的流程:
if
for
,while
和do
- while
?
- :
在布尔值消耗的所有这些地方,添加了隐式!= 0
,所以
while (n)
装置
while (n != 0)
因此,除零以外的所有值都被视为true
。
在语言中还有其他地方,其中布尔值是由生成的逻辑表达式生成的,例如逻辑NOT !
运算符。在这种情况下,生成的值仅限于0
,1
集。具体来说,零的逻辑NOT是1
。
答案 2 :(得分:3)
事实上,C将0视为FALSE
而将非0视为TRUE
。
答案 3 :(得分:2)
第一次到达while(n)
时,n
的值为3
。
因为只有0
计数为false,所以3
计数为真,并且该语句相当于while(3)
“为真”,因此执行以下行:
printf("%2d is true\n", n--);
该行输出n
的值。
如果您不理解为什么要输出该值,请返回一两章并阅读printf(.)
。我不知道你正在读什么书,但我认为它遵循逻辑顺序并且很早就引入了输出。
该行也从n中减去一个(这是n--
的含义)。
如果你不明白,再回过头来。
该表达式将n
减少一个,但在减法之前返回其值。
这导致第一行输出:
3 is true
然后程序循环回到while状态。现在n
是2
。但2
仍然算作真,所以循环代码(第一个printf
)再次执行,给出:
2 is true
以n
持有值1
结束。这导致进一步执行环路代码给出
1 is true
现在,执行离开时n
的值为0
。这被视为错误,因此循环条件while(n)
为while(0)
,这意味着“同时为假”。
因此执行会绕过循环代码并执行:
printf("%2d is false\n", n);
线路
0 is false
程序的其余部分反向执行类似的操作,从n
开始,其值为-3
,然后递增(n++
)直到它再次出现错误({{1是n
)。
这给出了行
0