### printf函数
- printf函数被设计用来显示格式串( format string)的内容,并且在该串中的指定位置插入可能的值。
- 调用printf函数时必须提供格式串,格式串后面的参数是需要在显示时插入到该串中的值:
`printf(格式串,表达式1 ,表达式2' . . ) ;`
- 显示的值可以是常量、变盘或者更加复杂的表达式。调用printf函数一次可以打印的值的个数没有限制。
- 格式串包含普通字符和转换说明,其中转换说明以字符研头。转换说明是用来表示打印过程中待填充的值的占位符。跟随在字符革后边的信息指定了把数值从内部形式(二进制)转换成打印形式(字符〉的方法,这也就是“转换说明”这一术语的由来。
- 转换说明%d指定printf函数把int型值从二进制形式转换成十进制数字组成的字符串,转换说明%f对float型值也进行类似的转换。
示例
~~~
#include <stdio.h>
main(){
int i, j ;
float x, y;
i = 10;
j = 20;
x = 43.2892f;
y = 5527.0f ;
printf ( "i=%d, j=%d , x=%f, y=%f\n ",i , j , x, y);
}
~~~
输出结果
~~~
i=10, j=20 , x=43.289200, y=5527.000000
~~~
- 格式串中的普通字符被简单复制给输出行,而变量i 、j 、x和y的值则依次替换了4个转换说明
- C语言编译器不会检测格式串中转换说明的数量是否和输出项的数量相匹配
以下代码均错误
`printf("%d %d\n",i);`
` printf("%d\n",i,j);`
- C语言编译器也不检测转换说明是否适合要显示项的数据类型. 如果程序员使用不正确的转换说明,程序将会简单地产生无意义的输出.
``printf("%f %d\n",i,x);``//其中int型变量i和 float型变量x的顺序放置错误
因为printf函数必须服从格式串,所以它将如实地显示出一个float型值,接着是一个int型值,可惜这两个值都将是无意义的。
### C的输出函数转换说明含义
~~~
%d - int
%ld – long int
%lld - long long
%hd – 短整型
%c - char
%f - float
%lf – double
%u – 无符号数
%x – 十六进制输出 int 或者long int 或者short int
%o - 八进制输出
%s – 字符串
~~~
* 占位符不要乱用 要选择正确的对应类型 否则可能会损失精度
* C字符串
* C没有String类型 C的字符串实际就是字符数组
* C数组定义 [ ]只能再变量名之后
* C字符串两种定义方式
char str[] = {'h','e','l','l','o','\0'};//注意'\0'字符串结束符
char str[] = "你好"; //这种定义方式不用写结束符 可以表示汉字
### 代码
~~~
#include<stdio.h>
#include<stdlib.h>
/**
printf("要输出的内容", 变量);
%d - int
%ld – long int
%lld - long long
%hd – 短整型 short
%c - char
%f - float
%lf – double
%u – 无符号数
%x – 十六进制输出 int 或者long int 或者short int
%o - 八进制输出
%s – 字符串
24910 二进制表示 01100001 01001110
12345678 二进制表示 10111100 01100001 01001110
占位符的使用注意不要乱用,可能会损失精度
*/
main(){
char c='a';
short s = 123;
int i = 12345678;
long l = 1234567890;
float f = 3.1415;
double d = 3.1415926;
printf("c = %c\n", c);
printf("s = %hd\n", s);
printf("i = %hd\n",i);//%hd – 短整型 short,short2个字节而int四个字节,这样short就会取出int低2个字节的数即输出24910
printf("l = %ld\n",l);
printf("f = %.4f\n",f); //默认输出的是6位有效数字的小数 想手动指定 加上.X,多出的位用0补齐;.4表示小数点后面输出4位有效数字
printf("d = %.7lf\n",d);
printf("%#x\n",i);//加上一个#,则自动添加前缀十六进制标志0x
printf("%#o\n",i);//加上一个#,则自动添加前缀十六进制标志0x
char cArray1[]={'a','b','c','d','\0'};//手动添加结束符号"\0",且结束符也占一个字节
char cArray2[]="abcd";//不需要手动添加,自动添加结束符号"\0",而且上面形式不可以输出汉字
char cArray3[]="你好";
printf("cArray1 = %s\n",cArray1);
printf("cArray2 = %s\n",cArray2);
printf("cArray3 = %s\n",cArray3);
system("pause");
}
~~~
![](http://i.imgur.com/vHY42mQ.png)
**格式化输出语句**
格式化输出语句,也可以说是占位输出,是将各种类型的数据按照格式化后的类型及指定的位置从计算机上显示。这样做的好处,是有利于计算机能够准确的将我们所要类型数据给我们。
其格式为:printf("输出格式符",输出项);
C语言中的常用格式化符:
![](http://img.mukewang.com/54856b620001e2ad04880099.jpg)
当输出语句中包含普通字符时,可以采用一下格式:
```
printf("普通字符输出格式符", 输出项);
```
![](http://img.mukewang.com/5492b62e000181b403060044.jpg)
输出结果为: `a=10 `
如果要输出多个变量的并指定变量的位置时候,格式符还可以连用,变量之间需要用逗号隔开,如:
![](http://img.mukewang.com/5492b6b5000145f904050080.jpg)
输出结果为: `整数:10,小数:7.560000,字符:c `
> 注意:格式符的个数要与变量、常量或者表达式的个数一一对应
#### 转义序列
- 前言
- JNI基础知识
- C语言知识点总结
- ①基本语法
- ②数据类型
- 枚举类型
- 自定义类型(类型定义)
- ③格式化输入输出
- printf函数
- scanf函数
- 编程规范
- ④变量和常量
- 局部变量和外部变量
- ⑤类型转换
- ⑥运算符
- ⑦结构语句
- 1、分支结构(选择语句)
- 2、循环结构
- 退出循环
- break语句
- continue语句
- goto语句
- ⑧函数
- 函数的定义和调用
- 参数
- 函数的返回值
- 递归函数
- 零起点学通C语言摘要
- 内部函数和外部函数
- 变量存储类别
- ⑨数组
- 指针
- 结构体
- 联合体(共用体)
- 预处理器
- 预处理器的工作原理
- 预处理指令
- 宏定义
- 简单的宏
- 带参数的宏
- 预定义宏
- 文件包含
- 条件编译
- 内存中的数据
- C语言读文件和写文件
- JNI知识点总结
- 前情回顾
- JNI规范
- jni开发
- jni开发中常见的错误
- JNI实战演练
- C++(CPP)在Android开发中的应用
- 掘金网友总结的音视频开发知识
- 音视频学习一、C 语言入门
- 1.程序结构
- 2. 基本语法
- 3. 数据类型
- 4. 变量
- 5. 常量
- 6. 存储类型关键字
- 7. 运算符
- 8. 判断
- 9. 循环
- 10. 函数
- 11. 作用域规则
- 12. 数组
- 13. 枚举
- 14. 指针
- 15. 函数指针与回调函数
- 16. 字符串
- 17. 结构体
- 18. 共用体
- 19. typedef
- 20. 输入 & 输出
- 21.文件读写
- 22. 预处理器
- 23.头文件
- 24. 强制类型转换
- 25. 错误处理
- 26. 递归
- 27. 可变参数
- 28. 内存管理
- 29. 命令行参数
- 总结
- 音视频学习二 、C++ 语言入门
- 1. 基本语法
- 2. C++ 关键字
- 3. 数据类型
- 4. 变量类型
- 5. 变量作用域
- 6. 常量
- 7. 修饰符类型
- 8. 存储类
- 9. 运算符
- 10. 循环
- 11. 判断
- 12. 函数
- 13. 数学运算
- 14. 数组
- 15. 字符串
- 16. 指针
- 17. 引用
- 18. 日期 & 时间
- 19. 输入输出
- 20. 数据结构
- 21. 类 & 对象
- 22. 继承
- 23. 重载运算符和重载函数
- 24. 多态
- 25. 数据封装
- 26. 接口(抽象类)
- 27. 文件和流
- 28. 异常处理
- 29. 动态内存
- 30. 命名空间
- 31. 预处理器
- 32. 多线程
- 总结
- 音视频学习 (三) JNI 从入门到掌握
- 音视频学习 (四) 交叉编译动态库、静态库的入门学习
- 音视频学习 (五) Shell 脚本入门
- 音视频学习 (六) 一键编译 32/64 位 FFmpeg 4.2.2
- 音视频学习 (七) 掌握音频基础知识并使用 AudioTrack、OpenSL ES 渲染 PCM 数据
- 音视频学习 (八) 掌握视频基础知识并使用 OpenGL ES 2.0 渲染 YUV 数据
- 音视频学习 (九) 从 0 ~ 1 开发一款 Android 端播放器(支持多协议网络拉流/本地文件)
- 音视频学习 (十) 基于 Nginx 搭建(rtmp、http)直播服务器
- 音视频学习 (十一) Android 端实现 rtmp 推流
- 音视频学习 (十二) 基于 FFmpeg + OpenSLES 实现音频万能播放器
- 音视频学习 (十三) Android 中通过 FFmpeg 命令对音视频编辑处理(已开源)