C语言 printf() 函数,总结笔记记录
道阻且长,行则将至。埋头苦干,不鸣则已,一鸣惊人!
1 printf 函数简介
printf() 和 scanf() 函数,是输入输出函数,或者叫做 I/O 函数。
两个函数,虽然一个是输出,一个是输入函数,但是他们的工作原理几乎相同。两个函数都使用格式字符串和参数列表。
请求 printf() 函数打印数据的指令要与待打印数据的类型相匹配。
参考网址:
菜鸟教程:C 输入 & 输出
菜鸟教程:C库函数 - printf()
2 转换说明及其打印的输出结果
参考《C Primer Plus》把常用的转换说明总结记录如下:
序号 | 转换说明 | 输出 |
---|---|---|
1 | %a | 浮点数、十六进制数和 p 计数法(C99/C11) |
2 | %A | 浮点数、十六进制数和 p 计数法(C99/C11) |
3 | %c | 单个字符 |
4 | %d | 有符号十进制整数 |
5 | %e | 浮点数,e 计数法 |
6 | %E | 浮点数,e 计数法 |
7 | %f | 浮点数,十进制计数法 |
8 | %g | 根据值的不同,自动选择 %f 或 %e。%e 格式用于指数小于 -4 或者大于或等于精度时 |
9 | %G | 根据值的不同,自动选择 %f 或 %E。%E 格式用于指数小于 -4 或者大于或等于精度时 |
10 | %i | 有符号十进制整数(与 %d 相同) |
11 | %o | 无符号八进制整数 |
12 | %p | 指针 |
13 | %s | 字符串 |
14 | %u | 无符号十进制整数 |
15 | %x | 无符号十六进制整数,使用十六进制数 0f |
16 | %X | 无符号十六进制整数,使用十六进制数 0F |
17 | %% | 打印一个百分号 |
警告:格式字符串中的转换说明一定要与后面的每个项相匹配,若忘记这个基本要求会导致严重的后果。
3 转换说明修饰符
在 % 和转换字符之间插入修饰符可修饰基本的转换说明。参考《C Primer Plus》把常用的修饰符用表格记录部分常用内容如下:
修饰符 | 含义 |
---|---|
标记 |
有5种标记符号(-、+、空格、#和0)详细内容见下一份表格,可以不使用标记或使用多个标记。 示例:"%-10d" |
数字 |
最小字段宽度 如果该字段不能容纳待打印的数字或字符串,系统会使用更宽的字段(系统会根据实际字段显示,而不会去掉不显示) 示例:"%4d" |
.数字 |
精度 对于 %e、%E 和 %f 转换,表示小数点右边数字的位数 对于 %g 和 %G 转换,表示有效数字最大位数 对于 %s 转换,表示待打印字符的最大数量 对于整形转换,表示待打印数字的最小位数 如有必要,使用前导 0 来达到这个位数 只是用 . 表示其后跟随一个 0,所以 %.f 和 %.0f 相同 示例:"%5.2f"打印一个浮点数,字段宽度为5字符,其中小数点后有两位数字 |
t |
和整型转换说明一起使用,表示 ptrdiff_t 类型的值。ptrdiff_t 是两个指针差值的类型(C99) 示例:"%td"、"%12ti" |
z | 和整型转换说明一起使用,表示 size_t 类型的值。size_t 是 sizeof 返回的类型(C99) |
针对类型可移植性,需做如下特别说明
sizeof 运算符以字节为单位返回类型或值的大小。但是在不同的系统中,使用printf()函数显示sizeof表达式,可能有不同的用法。这意味着,如果移植到不同的系统,还需要再查找适合当前系统的用法。这样就很麻烦,在C中提供了可移植性更好的类型。
1. size_t 定义成系统使用 sizeof 返回的类型,这个被称为底层类型。其次 printf 中使用 z 修饰符表示打印相应的类型。
2. C还定义了 ptrdiff_t 类型和 t 修饰符来标识系统使用的两个地址差值的底层有符号整数类型。针对浮点类型,float 参数的转换
对于浮点类型,有用于 double 和 long double 类型的转换说明,却没有 float 类型的。这是因为在标准 C 中,表达式或参数中的 float 类型值会被自动转换成 double 类型。
4 printf 中的标记
根据书本记录,总结标记内容如下:
标记 | 含义 |
---|---|
- |
待打印项左对齐。即,从字段的左侧开始打印该项 示例:"%-20s" |
+ | 有符号值若为正,则在值前面显示加号;若为负,则在值前面显示减号 |
空格 |
有符号值若为正,则在值前面显示前导空格(不显示任何符号);若为负,则在值前面显示减号 +标记覆盖一个空格 示例:"% 6.2f" |
# |
把结果转换为另一种形式。如果是 %o 格式,则以 0 开始;如果是 %x 或 %X 格式,则以 0x 或 0X 开始; 对于所有的浮点格式,# 保证了即使后面没有任何数字,也打印一个小数点字符。对于 %g 和 %G 格式,# 防止结果后面的 0 被删除 示例:"%#o"、"%#8.0f"、"+#10.3e" |
0 |
对于数值格式,用前导 0 代替空格填充字段宽度。对于整数格式,如果出现 - 标记或指定精度,则忽略该标记 示例:"%010d"和"%0.83f" |
5 转换说明的意义
转换说明把以二进制格式存储在计算机中的值转换成一系列字符(字符串)便于显示。
转换(conversion)可能会是我们误认为原始值被替换成转换后的值。实际上,转换说明是翻译说明,%d 的意思是:把给定的值翻译成十进制整数文本并打印出来。
5.1 举例说明
参数传递机制因实现而异,下边举例说明:
float n1 = 3.0;
double n2 = 3.0;
long n3 = 2000000000;
long n4 = 1234567890;printf("%ld %ld %ld %ld\n", n1, n2, n3, n4)
观察上述代码,进行如下分析:
- 分析上边的打印函数,n1 n2 是浮点类型,在打印的时候,float 会被转换为 double 类型,因此n1 n2 分别占8个字节;但是 long 类型的 n3 n4 分别占4个字节。
- 再来看我们的打印函数,使用的是%ld,也就是 long 类型的,这样按照顺序依次取,会先取 n1 的前半部分,然后第二次取 4 个字节,会取 n1 的后半部分,接下来的 4 个字节会是 n2 的前半部分,然后是 n2 的后半部分;到此打印就完了。因此对于 n3 n4,虽然用对了转换说明,但是printf还是读错了字节。
5.2 Printf 的返回值
printf 函数也有返回值,返回打印字符的个数。如果输出有错误,printf()则返回一个负值。
printf() 的打印输出是附带功能,通常很少用到。在写入文件时很常用。
5.3 打印较长的字符串
在实际操作中,经常会遇到打印一些较长字符串的问题,这个时候该怎么办呢?参考书本,有如下几种解法:
- 方法一: 使用多个 printf() 语句。
printf("Here's one way to print a ");
printf("long string.\n");
产生如下输出:
Here's one way to print a long string.
- 方法二: 用反斜杠(\)和 Enter(或 Return)键组合来断行。这会使得光标移动至下一行,而且字符串中不会包含换行符。其效果是在下一行继续输出。但是,下一行代码必须和程序清单中的代码一样从左边开始(貌似我现在在编译器中使用时,都是回车默认的缩进,而且好多也不是在这一行最左边)。
printf("Here's another way to print a \
long strint.\n");
产生如下输出:
Here's another way to print a long strint.
- 方法三: ANSI C引入的字符串连接。在两个用双括号括起来的字符串之间用空白隔开,C编译器会把多个字符串看作是一个字符串。
6 总结
- 实际使用过程中,熟能生巧,勤加练习;
- 不需要刻意去记住这些东西,但是需要了解,需要知道有这些东西可以用!
C语言 printf() 函数,总结笔记记录相关推荐
- 武林c语言,c语言printf函数的使用
看C语言程序的时候,往往会遇到printf函数输出,在此,武林小编我就总结一下c语言printf函数的使用,本文对c语言中printf函数的使用进行了详细的分析介绍,需要的朋友参考下. printf的 ...
- C语言 printf 函数 - C语言零基础入门教程
目录 一.printf 函数简介 二.C 语言格式符/占位符 三.printf 函数实战 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 ...
- C语言——printf()函数参数传递问题
C语言--printf( ) 函数参数传递问题 一.参数说明 printf() 函数是输出函数,可以实现和用户之间的交流,该函数的参数由两部分组成,即格式化字符串.待打印项 0-n 项,函数的格式如下 ...
- C语言printf函数格式字符
C语言printf函数格式字符: 1.%d,按整型数据的实际长度输出. 2.%md,m为指定的输出字段的宽度. 3.%ld,输出长整型数据. 4.o格式符,以八进制整型式输出整数. 5.x格式符,以十 ...
- C语言printf函数
如果你还不知道如何用C语言输出一句话的话那么你来对了地方 C语言由函数构成,有很多的函数构成一个程序 但程序总从主函数(main)开始运行 C语言输出函数printf printf("这里填 ...
- C语言printf函数详解和示例
文章目录 1.类型符(type) 2.宽度(width) 3.对齐标志(flags) 4.精度(prec) 5.格式化输出到字符串 6.获取视频教程 7.版权声明 C语言格式化输出的函数有printf ...
- 关于c语言printf函数的详细用法
C语言的printf输出格式控制 1.转换说明符 %a(%A) 浮点数.十六进制数字和p-(P-)记数法(C99) %c 字符 %d 有符号十进制整数 %f ...
- C语言printf函数详解
本文已整合到C语言标准库深度解读 printf是绝大多数人接触的第一个C语言函数,但绝大多数人对printf的认识也就到了hello world为止了,很多人甚至看不懂这个函数的声明: int pri ...
- C语言printf()函数具体解释和安全隐患
程序员都知道,也都会使用printf函数,但你知道它也有"安全隐患"吗? 下面就来举例我说说: 嵌入式专栏 1 问题描述 打印输出的数据并不是理论值,如下图(右边): 嵌入式专栏 ...
最新文章
- Windows10+anaconda,python3.5, 安装glove-python
- 分享一款Markdown的css样式
- poi 拆分带图片的word_学会这2招,再多的“表格编号”都能轻松解决!【Word教程】...
- 计算机视觉——百度百科
- awesome docsify learning notes
- html5 弹性布局
- Java项目课程03:涉及知识点
- 职业高中计算机网络试讲稿,《初识我的电脑》试讲稿+答辩
- VS code前端配置
- 鸿蒙会取代emui,华为称自家手机运行鸿蒙系统正在推进 未来会取代安卓吗?
- IIS7的Gzip压缩模式和IIS6的Gzip压缩模式性能对比 【转】
- 【实用插件】精心挑选6款优秀的 jQuery Tooltip 插件
- 2021-07-01本科毕业设计需要查重什么?
- 汤家凤:历年真题怎么用?接力题典怎么配合?黄金十月拼命干,提高很多分数不是梦!...
- oracle 查看表历史记录,Oracle 查看表操作历史记录并恢复
- 不同坐标系下角速度_惯性技术常用坐标系
- 耶耶!我进了全国网络管理员前50了
- 激活win10专业版
- 算术编码如何将原始数据编码为二进制
- GBase 8s部署SDS集群
热门文章
- 牺牲一个存储空间的循环队列实现方法
- 云服务器ECS使用记录-1. 介绍
- python做网站怎么样_python能做网站吗
- 福建食用菌产业博览会盛大开幕 谋定中国农民丰收节交易会
- fabric.js 钢笔橡皮问题
- 桂 林 理 工 大 学实 验 报 告实验四 选择结构程序设计
- 人脸识别-Loss-2010:Softmax Loss(Softmax激活函数 + “交叉熵损失函数”)【样本3真实标签为c_5,则样本3的损失:loss_3=-log(\hat{y}_5^3)】
- 报表工具轻松搞定卡片式报表
- 微信小程序常用组件库收藏备用
- Azure Machine Learning Studio 实例 -- 预测xx年的食物工厂总数
- 武林c语言,c语言printf函数的使用