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!

