当前位置:嗨网首页>书籍在线阅读

12-其他真值

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

6.3.2 其他真值

既然 10 可以作为 while 语句的测试表达式,是否还可以使用其他数字?如果可以,会发生什么?我们用程序清单6.7来做个实验。

程序清单6.7  truth.c 程序

// truth.c -- 哪些值为真
#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);
     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

执行第1个循环时, n 分别是 321 ,当 n 等于 0 时,第1个循环结束。与此类似,执行第2个循环时, n 分别是 -3-2-1 ,当 n 等于 0 时,第2个循环结束。一般而言,所有的非零值都视为真,只有 0 被视为假。在C中,真的概念还真宽!

也可以说,只要测试条件的值为非零,就会执行 while 循环。这是从数值方面而不是从真 / 假方面来看测试条件。要牢记:关系表达式为真,求值得 1 ;关系表达式为假,求值得 0 。因此,这些表达式实际上相当于数值。

许多C程序员都会很好地利用测试条件的这一特性。例如,用 while (goats) 替换 while (goats != 0) ,因为表达式 goats != 0goats 都只有在 goats 的值为 0 时才为 0 或假。第1种形式( while (goats != 0) )对初学者而言可能比较清楚,但是第2种形式( while (goats) )才是C程序员最常用的。要想成为一名C程序员,应该多熟悉 while (goats) 这种形式。