博客
关于我
第19节 字符数据及字符类型
阅读量:311 次
发布时间:2019-03-03

本文共 2946 字,大约阅读时间需要 9 分钟。

C语言字符常量与转义字符详解

一. 字符常量

字符常量是用单引号括起来的一个字符,例如 'a', '#', '%', 'D'。C语言中的字符常量表示一个ASCII码值,范围为0到255(对于unsigned char)或-128到127(对于signed char)。

二. 字符与数字的转换

可以通过减法和加法将字符常量转换为数字。例如:

int main() {    char c1, c2;    int i = 100;    c1 = 'a'; // 'a' 的ASCII码为97    i = i - c1; // i = 3    printf("c1: %c\n", c1); // 输出 'a'    printf("c1: %d, i: %d\n", c1, i); // 输出97和3    c2 = c1 + 4; // 'a' + 4 = 'e'    printf("c2: %c\n", c2); // 输出 'e'}

运行结果:

c1: ac1: 97, i: 3c2: e

三. ASCII码对照表

ASCII码共有256个值,常见字符的ASCII码值如下:

转义字符 意义 ASCII码值(十进制)
\a 响铃 (BEL) 7
\b 退格 (BS) 8
\f 换页 (FF) 12
\n 换行 (LF) 10
\r 回车 (CR) 13
\t 水平制表 (HT) 9
\v 垂直制表 (VT) 11
\0 空字符 (NULL) 0
\xhh 1-2位十六进制数 两位十六进制
\ddd 1-3位八进制数 三位八进制

四. 字符数据的输入输出

scanf()printf() 函数

scanf()print() 用于读取和输出字符。例如:

int main() {    int x, y, z;    char ch;    scanf_s("%d%c%d", &x, &ch, 2, &y); // 读取三个输入    z = x + y;    printf("%d%c%d=%d\n", y, ch, x, z);}

运行结果:

1+22+1=3

getchar()putchar()

getchar() 读取输入字符,putchar() 写入字符流。例如:

int main() {    char c;    c = getchar(); // 读取大写字母    putchar(c + 32); // 显示小写字母    putchar('\n');}

运行结果:

Aa

五. 获得缓存区中的输入数据

使用 getchar() 读取输入数据时,缓冲区可能包含未显示的字符。例如:

int main() {    char c1, c2;    c1 = getchar(); // 读取第一个字符    c2 = getchar(); // 读取第二个字符    printf("%c %c\n", c1, c2); // 输出两个字符    printf("%d %d\n", c1, c2); // 输出两个字符的ASCII码    return 0;}

输入结果:

输入abc
<回车>
abca b97 98输入a
<回车>
aa97 10
<回车>

六. 以 \ 开头的字符序列——转义字符常量

许多控制字符不能用普通字符表示,必须使用转义字符。常见转义字符及其意义如下:

转义字符 意义 ASCII码值(十进制)
\a 响铃 (BEL) 7
\b 退格 (BS) 8
\f 换页 (FF) 12
\n 换行 (LF) 10
\r 回车 (CR) 13
\t 水平制表 (HT) 9
\v 垂直制表 (VT) 11
\0 空字符 (NULL) 0
\xhh 1-2位十六进制数 两位十六进制
\ddd 1-3位八进制数 三位八进制

七. 转义字符用法示例

1. 格式化输出

int main() {    printf("%.4f%.4f%.4f\n", 1.01, 2.2334, 3.4);    printf("%.4f\t%.4f\t%.4f\n", 1.01, 2.2334, 3.4);}

运行结果:

1.01002.23343.40001.0100  2.2334  3.4000

2. 控制字符示例

int main() {    printf("This\nis\na\n\t\ttest\n\nShe said, \"How are you?\"\n");}

运行结果:

Thisisa                testShe said, "How are you?"

八. ASCII编码与汉字编码的区别

项目 ASCII编码 汉字编码
字符长度 1字节 2字节
编码方式 和西文混用,最高位为0 每字节最高位均为1
字符范围 0-255 0-255

九. 字符串常量及存储

  • 字符串常量用双引号括起来,例如 "abc", "hello", "a+b", "He Lijian"
  • 字符串常量在内存中占用多少字节取决于执行环境(例如,通常为4字节)。
  • 编译系统会自动在字符串末尾添加终止字符 \0
  • 转义字符和空格会被正确处理。
  • 例子

    int main() {    char s[] = "abc\n"; // 占5字节:'a', 'b', 'c', '\n', '\0'    char s[] = "abc\\n"; // 占5字节:'a', 'b', 'c', '\\', 'n', '\0'}

    实践项目

    1. 输入小写字母,输出大写字母和ASCII码

    int main() {    char ch;    printf("输入一个小写字母: ");    scanf_s("%c", &ch, 1);    ch = ch - 32;    printf("与对应的大写字母: %c\n", ch);    printf("大写字母 ASCII码: %d\n", ch);}

    运行结果:

    输入一个小写字母: a与对应的大写字母: A大写字母 ASCII码: 65

    2. 使用 \t 对齐输出项

    int main() {    printf("Name\tAge\tSalary\taddr\n");    printf("Tom\t%d\t%6.1f\t%s\n", 20, 314.2, "NewYork");    printf("Jerry\t%d\t%6.1f\t%s\n", 22, 7876.4, "BingJing");    printf("Blotu\t%d\t%6.1f\t%s\n", 9, 5.5, "ShangHai");    return 0;}

    运行结果:

    Name    Age     Salary  addrTom     20       314.2  NewYorkJerry   22      7876.4  BingJingBlotu   9          5.5  ShangHai

    转载地址:http://cjqm.baihongyu.com/

    你可能感兴趣的文章
    oracle系统 介绍,ORACLE数据库管理系统介绍
    查看>>
    oracle获取数据库表、字段、注释、约束等
    查看>>
    oracle表空间查询维护命令大全之三(暂时表空间)史上最全
    查看>>
    oracle表访问方式
    查看>>
    Oracle触发器
    查看>>
    Oracle计划将ZGC项目提交给OpenJDK
    查看>>
    oracle账号共享
    查看>>
    Oracle闪回技术(Flashback)
    查看>>
    oracle零碎要点---ip地址问题,服务问题,系统默认密码问题
    查看>>
    oracle零碎要点---oracle em的web访问地址忘了
    查看>>
    Oracle零碎要点---多表联合查询,收集数据库基本资料
    查看>>
    Oracle静默安装
    查看>>
    【Bert101】变压器模型背后的复杂数学【02/4】
    查看>>
    Oracle面试题:Oracle中truncate和delete的区别
    查看>>
    ThreadLocal线程内部存储类
    查看>>
    thinkphp 常用SQL执行语句总结
    查看>>
    Oracle:ORA-00911: 无效字符
    查看>>
    Text-to-Image with Diffusion models的巅峰之作:深入解读 DALL·E 2
    查看>>
    Tensorflow.python.framework.errors_impl.ResourceExhaustedError:无法分配内存[操作:AddV2]
    查看>>
    TCP基本入门-简单认识一下什么是TCP
    查看>>