printf 转义序列和转换字符%

本文详细介绍了C语言中常用的输出函数printf()的使用方法,包括格式字符串、转义序列、转换说明等核心概念,并提供了示例程序。

The usually used output statement is printf (). It is one of the library functions.

Syntax : printf (“format string”, argument list);

              Format string may be a collection of escape sequence or/and conversion specification or/and string constant. The format string directs the printf function to display the entire text enclosed within the double quotes without any change.

Escape sequence:

                 Escape sequence is a pair of character. The first letter is a slash followed by a character. Escape sequence help us to represent within the format string invisible and non-printed character although there are physically two characters in any escape sequence. It actually represents only one. The various escape sequences are

 Escape sequence  Meaning 
 \n  New line 
 \t  Tab 
 \b  Back space 
 \a  Bell 
 \o  Null character 
 \?  To print question mark 
 \\  To print slash 
 \'  To print single quote 
 \"  To print double quote 

Conversion specification:

                Conversion specification is also a pair of character. it is preceded by  % and followed by a quote which may be a character. The Conversion specification inscribes the printf() function that it could print some value at that location in the text. The Conversion characters supported by C are

 Conversion character  Meaning 
 %d  Data item is displayed as a signed decimal integer. 
 %i  Data item is displayed as a single decimal integer. 
 %f  Data item is displayed as a floating-point value without an exponent. 
 %c  Data item is displayed as a single character. 
 %e  Data item is displayed as a floating-point value with an exponent. 
 %g  Data item is displayed as a floating-point value using either e-type or f-type conversion depending on value. 
 %o  Data item is displayed as an octal integer, without a leading zero. 
 %s  Data item is displayed as string. 
 %u  Data item is displayed as an unsigned decimal integer. 
 %x  Data item is displayed as a hexadecimal integer, without a leading 0x. 

The following program illustrates the use of puts function.


转义字符:
\0 :字符串结束标志;
\n :换行(ascⅱ码为10); 
\t :横向跳格; 
\b :退格;
\r :回车(ascⅱ码为13);
\f :走纸换页;
\\ :字符\(ascⅱ码为92); 
\' :单引号; 
'\"':双引号;
\ddd:用8进制表示字符;
\xhh:用16进制表示字符

如果输入空串的话,程序就会输出 thanks


<think>我们正在总结C Primer Plus第三章"数据与C"中关于八进制、十六进制以及转义序列的内容。根据引用[1]引用[2]提供的资料,以下是重点: 1. **八进制十六进制表示法**: - 在C程序中,可以使用不同进制的数。八进制数以`0`开头(如`037`),十六进制数以`0x`或`0X`开头(如`0x1f`)。 - 在`printf`中输出时,使用不同的转换说明符: - 八进制:`%o`(无前缀),`%#o`(带前缀`0`) - 十六进制:`%x`(小写字母无前缀),`%X`(大写字母无前缀),`%#x`(带前缀`0x`),`%#X`(带前缀`0X`) 2. **转义序列**: - 转义序列用于表示特殊字符(如换行、制表符等)或无法直接输入的字符(如单引号、双引号)。 - 常见的转义序列包括: - `\n`:换行符 - `\t`:水平制表符 - `\\`:反斜杠 - `\"`:双引号 - `\'`:单引号 - `\0`:空字符(常用于字符串结束标志) - 八进制转义序列:由反斜杠后跟1到3位八进制数字组成(如`\007`表示响铃字符)。 - 十六进制转义序列:由`\x`后跟十六进制数字组成(如`\x1f`表示一个十六进制字符)。 下面是具体总结: ### C Primer Plus 第三章:进制表示与转义序列总结 #### 1. **进制表示与转换说明符** - **八进制**: - 在代码中,八进制数以`0`前缀开头,例如`037`表示十进制的31。 - 使用`printf`输出时: - `%o`:以八进制无前缀形式输出(如`37`)。 - `%#o`:以带前缀`0`的形式输出(如`037`)[^1]。 - **十六进制**: - 在代码中,十六进制数以`0x`或`0X`开头,例如`0x1f`表示十进制的31。 - 使用`printf`输出时: - `%x`:以小写字母输出十六进制数(如`1f`)。 - `%X`:以大写字母输出十六进制数(如`1F`)。 - `%#x`:带小写前缀`0x`的输出(如`0x1f`)。 - `%#X`:带大写前缀`0X`的输出(如`0X1F`)[^1][^2]。 #### 2. **转义序列** - **作用**:用于表示无法直接输入或具有特殊含义的字符。 - **常用转义序列**: | 序列 | 含义 | |--------|------------------| | `\n` | 换行符 | | `\t` | 水平制表符 | | `\\` | 反斜杠 | | `\"` | 双引号 | | `\'` | 单引号 | | `\0` | 空字符(NULL) | - **八进制转义序列**:格式为`\`后跟1到3位八进制数字(范围`0~377`)。例如: - `\007` 表示响铃字符(ASCII 7)。 - **十六进制转义序列**:格式为`\x`后跟十六进制数字(长度不限,但只要在十六进制值范围内的字符)。例如: - `\x1f` 表示一个十六进制字符(ASCII 31)[^1]。 #### 3. **应用示例** ```c #include <stdio.h> int main() { int oct = 037; // 八进制37(十进制31) int hex = 0x1f; // 十六进制1f(十进制31) printf("八进制: %o -> 带前缀: %#o\n", oct, oct); // 输出: 37 037 printf("十六进制: %x -> 带前缀: %#x\n", hex, hex); // 输出: 1f 0x1f printf("转义序列测试:\n"); printf("响铃\a\n"); // \a 是响铃字符(ASCII 7) printf("制表符:\tHello\n"); return 0; } ``` #### 注意事项 - 使用转义序列时,确保八进制值不超过`\377`(即十进制255),十六进制值在有效ASCII范围内。 - 在字符串中,空字符`\0`标识字符串结束,不可省略。 §§相关问题§§ 1. 在C语言中,如何处理二进制数的输入输出? 2. 转义序列`\a`、`\b`、`\f`、`\r`、`\v`的具体功能是什么? 3. 如何在C程序中安全地使用非ASCII字符(如Unicode字符)? </think>### C Primer Plus 第三章:八进制、十六进制与转义序列总结 #### 1. **进制表示法** - **八进制**: - 以 `0` 开头(如 `037` 表示十进制的 31) - `printf` 转换说明符: - `%o`:无前缀输出(如 `37`) - `%#o`:带前缀 `0` 输出(如 `037`)[^1] - **十六进制**: - 以 `0x` 或 `0X` 开头(如 `0x1F` 表示十进制的 31) - `printf` 转换说明符: - `%x`:小写字母输出(如 `1f`) - `%X`:大写字母输出(如 `1F`) - `%#x`:带小写前缀 `0x`(如 `0x1f`) - `%#X`:带大写前缀 `0X`(如 `0X1F`)[^1][^2] - **进制转换原则**: - 所有进制在内存中均以二进制存储 - 输入输出时通过转换说明符控制显示格式 #### 2. **转义序列** - **作用**:表示无法直接输入的字符(如换行、制表符等) - **常用序列**: | 序列 | 含义 | ASCII值(十进制) | |--------|------------------|------------------| | `\n` | 换行符 | 10 | | `\t` | 水平制表符 | 9 | | `\\` | 反斜杠 | 92 | | `\"` | 双引号 | 34 | | `\'` | 单引号 | 39 | | `\0` | 空字符(NULL) | 0 | - **八进制转义序列**: 格式 `\ddd`(1-3位八进制数),例如: - `\007` 表示响铃字符(ASCII 7) - 范围限制:$0 \leq ddd \leq 377_8$(即十进制 0-255)[^1] - **十六进制转义序列**: 格式 `\xhh`(1-2位十六进制数),例如: - `\x1F` 表示单元分隔符(ASCII 31) - 范围限制:$0 \leq hh \leq \text{FF}_{16}$(即十进制 0-255) #### 3. **应用示例** ```c #include <stdio.h> int main() { // 进制输出示例 printf("八进制: %#o → 十进制: %d\n", 037, 037); // 输出: 037 → 31 printf("十六进制: %#x → 十进制: %d\n", 0x1F, 0x1F); // 输出: 0x1f → 31 // 转义序列示例 printf("换行:\n开始\t制表\n"); printf("路径: C:\\Users\\file.txt\n"); printf("响铃\a\n"); // 触发系统提示音 return 0; } ``` #### 4. **关键注意事项** - **前缀必要性**:八进制/十六进制字面量必须带 `0` 或 `0x` 前缀 - **转换说明符匹配**: - 用 `%o` 输出十进制整数会得到错误结果 - 十六进制浮点数需用 `%a`(C99 起支持)[^2] - **转义序列安全性**: - 八进制转义超过 `\377` 会导致未定义行为 - 十六进制转义中 `\x` 后必须紧跟有效十六进制数字
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值