C 语言中的布尔值
与 int、char 或 float 类型不同,ANSI C 标准没有内置或主布尔类型。布尔值或 bool 数据通常指可以保存两个二进制值之一的数据:真或假(或"是/否"、"开/关"等)。即使 C 语言中没有 bool 类型,您也可以借助 enum 类型实现布尔值的行为。
符合 C99 或更高版本标准的新版 C 编译器支持 bool 类型,该类型已在头文件 stdbool.h 中定义。
使用枚举在 C 语言中实现布尔类型
枚举类型将用户定义的标识符赋给整型常量。我们可以定义一个枚举类型,以 true 和 false 作为标识符,其值分别为 1 和 0。
示例
1 或任何其他非 0 的数字表示真,而 0 表示假。
#include <stdio.h> int main (){ enum bool {false, true}; enum bool x = true; enum bool y = false; printf ("%d ", x); printf ("%d ", y); }
输出
运行代码并检查其输出 −
1 0
typedef enum as BOOL
为了更简洁,我们可以使用 typedef 关键字,通过名称 BOOL 来调用 enum bool。
示例 1
请看以下示例 -
#include <stdio.h> int main(){ typedef enum {false, true} BOOL; BOOL x = true; BOOL y = false; printf ("%d ", x); printf ("%d ", y); }
这里,你也会得到相同的输出 -
输出
1 0
示例 2
我们甚至可以在决策语句或循环语句中使用枚举常量 -
#include <stdio.h> int main(){ typedef enum {false, true} BOOL; int i = 0; while(true){ i++; printf("%d ", i); if(i >= 5) break; } return 0; }
输出
运行此代码时,将产生以下输出 -
1 2 3 4 5
使用 #define 定义布尔值
#define 预处理指令用于定义常量。我们可以使用它来定义布尔常量,FALSE 为 0,TRUE 为 1。
示例
请看以下示例 -
#include <stdio.h> #define FALSE 0 #define TRUE 1 int main(){ printf("False: %d True: %d", FALSE, TRUE); return 0; }
输出
运行代码并检查其输出 −
False: 0 True: 1
stdbool.h 中的布尔类型
C 语言的 C99 标准引入了 stdbool.h 头文件。该文件包含 bool 类型的定义,该类型实际上是 _bool 类型的 typedef 别名。它还定义了宏 true,其展开为 1,以及宏 false,其展开为 0。
示例 1
我们可以按如下方式使用 bool 类型 -
#include <stdio.h> #include <stdbool.h> int main(){ bool a = true; bool b = false; printf("True: %d ", a); printf("False: %d", b); return 0; }
输出
执行此代码后,您将获得以下输出 -
True: 1 False: 0
示例 2
我们也可以在逻辑表达式中使用 bool 类型变量,如下例所示 -
#include <stdio.h> #include <stdbool.h> int main(){ bool x; x = 10 > 5; if(x) printf("x is True "); else printf("x is False "); bool y; int marks = 40; y = marks > 50; if(y) printf("Result: Pass "); else printf("Result: Fail "); }
输出
运行代码并检查其输出 −
x is True Result: Fail
示例 3
让我们借助布尔变量实现一个 while 循环 -
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> int main(void){ bool loop = true; int i = 0; while(loop){ i++; printf("i: %d ", i); if (i >= 5) loop = false; } printf("Loop stopped! "); return EXIT_SUCCESS; }
输出
运行此代码时,将产生以下输出 -
i: 1 i: 2 i: 3 i: 4 i: 5 Loop stopped!