C iscntrl() 语法
iscntrl() 是 C 语言 <ctype.h> 标准库的一个函数,用于判断字符是否为控制字符。
所谓的控制字符,指的是不可打印的字符。控制字符一般用于控制输出设备(如打印机或终端)的行为,而不是显示符号。在 “ASCII 字符集” 中,控制字符通常对应于十进制值 0-31 和 127。
语法:
iscntrl(c)说明:
iscntrl() 函数接收单个参数。
c (int):是一个字符。虽然是 int 类型,但它的值必须能够表示为一个 unsigned char,或者等于 EOF。
iscntrl() 函数返回一个 int 类型的值,来表示判断结果。
- 如果参数 c 是一个控制字符,则返回一个非零值(表示 “真”)。
- 否则,返回 0(表示 “假”)。
提示: iscntrl 是 “is control character” 的缩写。
C iscntrl() 摘要
| 使用频率 | 高 |
|---|---|
| 修改字符串 | 否 |
| 官方文档 | 查看 |
C iscntrl() 示例
接下来,我们通过几个简单的例子来讲解一下 C iscntrl() 函数是如何使用的。
示例 1:iscntrl() 判断常见的控制字符
#include <stdio.h>
#include <ctype.h>
int main(void)
{
char ch1 = '\n'; // 换行符
char ch2 = '\t'; // 水平制表符
char ch3 = '\r'; // 回车符
char ch4 = '\b'; // 退格符
if (iscntrl(ch1)) {
printf("'\\n'(换行符)是控制字符。\n");
} else {
printf("'\\n'(换行符) 不是控制字符。\n");
}
if (iscntrl(ch2)) {
printf("'\\t'(制表符) 是控制字符。\n");
} else {
printf("'\\t'(制表符) 不是控制字符。\n");
}
if (iscntrl(ch3)) {
printf("'\\r'(回车符) 是控制字符。\n");
} else {
printf("'\\r'(回车符) 不是控制字符。\n");
}
if (iscntrl(ch4)) {
printf("'\\b'(退格符) 是控制字符。\n");
} else {
printf("'\\b'(退格符) 不是控制字符。\n");
}
return 0;
}运行结果如下。
'\n'(换行符)是控制字符。
'\t'(制表符)是控制字符。
'\r'(回车符)是控制字符。
'\b'(退格符)是控制字符。分析:
如果参数是常见的控制字符(如换行符、制表符、回车符和退格符),那么 iscntrl() 会返回一个非零值(表示 “真”)。
示例 2:iscntrl() 判断可打印字符和数字
#include <stdio.h>
#include <ctype.h>
int main(void)
{
char ch1 = 'A';
char ch2 = '0';
char ch3 = '$';
char ch4 = ' ';
if (iscntrl(ch1)) {
printf("'%c' 是控制字符。\n", ch1);
} else {
printf("'%c' 不是控制字符。\n", ch1);
}
if (iscntrl(ch2)) {
printf("'%c' 是控制字符。\n", ch2);
} else {
printf("'%c' 不是控制字符。\n", ch2);
}
if (iscntrl(ch3)) {
printf("'%c' 是控制字符。\n", ch3);
} else {
printf("'%c' 不是控制字符。\n", ch3);
}
if (iscntrl(ch4)) {
printf("'%c' 是控制字符。\n", ch4);
} else {
printf("'%c' 不是控制字符。\n", ch4);
}
return 0;
}运行结果如下。
'A' 不是控制字符。
'0' 不是控制字符。
'$' 不是控制字符。
' ' 不是控制字符。分析:
对于可打印字符(包括字母、数字、标点符号和空格),iscntrl() 会返回 0(表示 “假”)。
示例 3:iscntrl() 处理 EOF
#include <stdio.h>
#include <ctype.h>
int main(void)
{
int result;
result = iscntrl(EOF);
printf("%d\n", result);
return 0;
}运行结果如下。
0分析:
如果 iscntrl() 的参数是 EOF,那么它会返回 0。
深入了解 iscntrl()
iscntrl() 函数的行为会受到当前区域设置 (locale) 的影响,但对于 ASCII 值为 0-31 和 127 的控制字符,其分类通常在不同的区域设置下保持一致。也就是说,在大多数情况下,iscntrl() 可以可靠地识别这些基本的控制字符。
需要注意的是,虽然 iscntrl() 的参数 c 写的是 int 类型,但我们必须传入一个字符(比如 'a'、'B' 等),或者输入特殊的 EOF 值(常用于文件结束判断)。如果传入一个负数(除了 EOF),则可能会导致未定义行为。
