道阻且长,行则将至。埋头苦干,不鸣则已,一鸣惊人!

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 总结

  1. 实际使用过程中,熟能生巧,勤加练习;
  2. 不需要刻意去记住这些东西,但是需要了解,需要知道有这些东西可以用!

    C语言 printf() 函数,总结笔记记录相关推荐

    1. 武林c语言,c语言printf函数的使用

      看C语言程序的时候,往往会遇到printf函数输出,在此,武林小编我就总结一下c语言printf函数的使用,本文对c语言中printf函数的使用进行了详细的分析介绍,需要的朋友参考下. printf的 ...

    2. C语言 printf 函数 - C语言零基础入门教程

      目录 一.printf 函数简介 二.C 语言格式符/占位符 三.printf 函数实战 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 ...

    3. C语言——printf()函数参数传递问题

      C语言--printf( ) 函数参数传递问题 一.参数说明 printf() 函数是输出函数,可以实现和用户之间的交流,该函数的参数由两部分组成,即格式化字符串.待打印项 0-n 项,函数的格式如下 ...

    4. C语言printf函数格式字符

      C语言printf函数格式字符: 1.%d,按整型数据的实际长度输出. 2.%md,m为指定的输出字段的宽度. 3.%ld,输出长整型数据. 4.o格式符,以八进制整型式输出整数. 5.x格式符,以十 ...

    5. C语言printf函数

      如果你还不知道如何用C语言输出一句话的话那么你来对了地方 C语言由函数构成,有很多的函数构成一个程序 但程序总从主函数(main)开始运行 C语言输出函数printf printf("这里填 ...

    6. C语言printf函数详解和示例

      文章目录 1.类型符(type) 2.宽度(width) 3.对齐标志(flags) 4.精度(prec) 5.格式化输出到字符串 6.获取视频教程 7.版权声明 C语言格式化输出的函数有printf ...

    7. 关于c语言printf函数的详细用法

      C语言的printf输出格式控制 1.转换说明符 %a(%A)     浮点数.十六进制数字和p-(P-)记数法(C99) %c         字符 %d         有符号十进制整数 %f   ...

    8. C语言printf函数详解

      本文已整合到C语言标准库深度解读 printf是绝大多数人接触的第一个C语言函数,但绝大多数人对printf的认识也就到了hello world为止了,很多人甚至看不懂这个函数的声明: int pri ...

    9. C语言printf()函数具体解释和安全隐患

      程序员都知道,也都会使用printf函数,但你知道它也有"安全隐患"吗? 下面就来举例我说说: 嵌入式专栏 1 问题描述 打印输出的数据并不是理论值,如下图(右边): 嵌入式专栏 ...

    最新文章

    1. Windows10+anaconda,python3.5, 安装glove-python
    2. 分享一款Markdown的css样式
    3. poi 拆分带图片的word_学会这2招,再多的“表格编号”都能轻松解决!【Word教程】...
    4. 计算机视觉——百度百科
    5. awesome docsify learning notes
    6. html5 弹性布局
    7. Java项目课程03:涉及知识点
    8. 职业高中计算机网络试讲稿,《初识我的电脑》试讲稿+答辩
    9. VS code前端配置
    10. 鸿蒙会取代emui,华为称自家手机运行鸿蒙系统正在推进 未来会取代安卓吗?
    11. IIS7的Gzip压缩模式和IIS6的Gzip压缩模式性能对比 【转】
    12. 【实用插件】精心挑选6款优秀的 jQuery Tooltip 插件
    13. 2021-07-01本科毕业设计需要查重什么?
    14. 汤家凤:历年真题怎么用?接力题典怎么配合?黄金十月拼命干,提高很多分数不是梦!...
    15. oracle 查看表历史记录,Oracle 查看表操作历史记录并恢复
    16. 不同坐标系下角速度_惯性技术常用坐标系
    17. 耶耶!我进了全国网络管理员前50了
    18. 激活win10专业版
    19. 算术编码如何将原始数据编码为二进制
    20. GBase 8s部署SDS集群

    热门文章

    1. 牺牲一个存储空间的循环队列实现方法
    2. 云服务器ECS使用记录-1. 介绍
    3. python做网站怎么样_python能做网站吗
    4. 福建食用菌产业博览会盛大开幕 谋定中国农民丰收节交易会
    5. fabric.js 钢笔橡皮问题
    6. 桂 林 理 工 大 学实 验 报 告实验四 选择结构程序设计
    7. 人脸识别-Loss-2010:Softmax Loss(Softmax激活函数 + “交叉熵损失函数”)【样本3真实标签为c_5,则样本3的损失:loss_3=-log(\hat{y}_5^3)】
    8. 报表工具轻松搞定卡片式报表
    9. 微信小程序常用组件库收藏备用
    10. Azure Machine Learning Studio 实例 -- 预测xx年的食物工厂总数