(。・∀・)ノ゙嗨!大家好,我是呆博~很开心可以在这里给接着大家分享我的 C 语言学习笔记~因为微信对于代码块的支持并不是很好,所以代码部分以截图形式呈现,如果想获取原始代码可点击底部 阅读原文 获得。

1

从一个报错讲起

在上一篇文章中,我们使用了 C 语言在屏幕中输出了"Hello World!",但就printf这个函数而言,它的使用却不只是这么简单。比如我们想通过下面这段代码在屏幕上输出鱼形图案

在使用 gcc 进行编译的时候会出现如下的报错

这个问题是因为printf的用法不符合要求,那正确的用法是什么样的呢?

2

printf 函数

printf 函数用于打印格式化字符串到标准输出流,其函数原型为

其中的 format 参数是一个格式化字符串,由格式化占位符和普通字符组成,“,”后面接的是与占位符所对应的数字、字符串等。格式化占位符(以 % 开头)用于指明输出的参数值如何格式化。直白的讲,const char * format 这一大堆是一个字符串,变量不能直接写在字符串中,所以用占位符占位。

2.1

格式化占位符(format)的语法

格式化占位符(format)的具体语法如下

%[flags][width][.precision][length]specifier

其中的 “[]” 表示可选参数,因此每一个格式化占位符均以 % 开始,以转换字符(specifier)结束。因此首先介绍 specifier的内容及含义,再介绍其他参数。这些参数不需要都背下来,只需要记下常用的即可。

specifier(转换字符,必选)

specifier 的内容及含义如下

需要注意的是,如果 % 后边的字符不是转换字符,则其行为没有定义,编译时会报错。

flags(标志,可选)

flags的内容及含义如下:

width(宽度,可选)

width 是一个数值,用于指定最小字段的宽度。转换后的参数输出宽度至少要达到这个数值。如果参数的字符数小于该数值,则在参数左边(如果 flags 设置为 -,要求左对齐的话则在右边)填充一些字符。填充字符通常为空格,但是如果 flags 设置为 0,则填充字符为数字 0。

.precision(精度,可选)

.precision 通过点号(.)分隔字段的宽度和精度

对于字符串,它指定打印的字符的最大个数

对于整数,它指定打印的数字位数(必要时可加填充位 0 以达到宽度要求)

对于转换字符为 e、E 或 f,它指定打印的小数点后的数字位数

对于转换字符为 g 或 G,它指定打印的有效数字位数

length(长度修饰符,可选)

length 的值可以是 h、hh、l、ll 或 L

hh 表示将相应的参数按 signed char 或 unsigned char 类型输出

h 表示将相应的参数按 short 或 unsigned short 类型输出

l 表示将相应的参数按 long 或 unsigned long 类型输出

ll 表示将相应的参数按 long long 或 unsigned long long 类型输出

L 表示将相应的参数按 long double 类型输出

2.2

附加参数语法

int printf ( const char * format, ... )中的 ...就是附加参数,该参数的个数由格式化字符串决定。每个参数的值应当与前面格式化字符串中的占位符类型和位置一一对应。

2.3

返回值

如果函数调用成功,返回值是实际打印的字符数(不包含表示字符串结束的 ‘\0’);如果函数调用失败,返回值是一个负数

2.4

使用示例

看了上面那么一大堆各种奇奇怪怪的参数,是不是有点晕,让我们举个例子看看,或许会更好理解

编译执行得到如下结果

3

转义字符

通过上面的介绍可知const char * format是一个字符串,但是文章开头的那种写法明显不是一个字符串,那我们应该如何调整使得它变为一个字符串呢?通过转义字符。

在 C 语言中,用双引号括起来的内容称之为字符串,即平时所说的文本。字符串可以由可见字符和转义字符组成,像上面所示的那条鱼的主要组成部分——星号(*),就是可见字符。可见字符就是你输入什么,显示出来就是什么。而你如果想将一个字符串分为两行来显示,那么你就需要使用到转义字符。转义字符一般是表示特殊含义的非可见字符,以反斜杠开头,常见的转义字符及其含义如下表

在字符串中反斜杠 + 字符是转义字符,表示特殊含义。但反斜杠如果后边不带任何字符(直接换行),表示我们希望 C 语言将该行以及下一行看做是一个整体。

所以为了打印输出一条鱼,我们要将\n和\一起使用,具体代码如下

执行结果如下图所示

当然这样的图案可以打印很多,百度搜索 “初级字符画绘制工具”我们可以获得很多表情,或者自定义一个表情,比如说下面的派大星

输出结果如下

好了~今天的内容就到这里了,感谢大家的信任和支持~

原文发布时间为:2018-10-02

本文作者: 独孤呆博

本文来自云栖社区合作伙伴“轮子工厂”,了解相关信息可以关注“轮子工厂"

2. C语言 -- printf 的花式操作相关推荐

  1. Unix/Linux环境C编程入门教程(41) C语言库函数的文件操作详解

     上一篇博客我们讲解了如何使用Linux提供的文件操作函数,本文主要讲解使用C语言提供的文件操作的库函数. 1.函数介绍 fopen(打开文件) 相关函数 open,fclose 表头文件 #in ...

  2. DSP学习 -- C语言实现MySQL数据库操作

    如需转载请注明出处 https://juyou.blog.csdn.net/article/details/109259673 要实现在VS上使用C语言操作MySQL数据库.接下来看一下该怎么操作. ...

  3. c语言行列坐标是先行后j,C语言学习之行列操作

    C语言学习之队列操作 本文件为队列操作的接口: /*queue.h*/ #ifndef _SEQQUEUE_H_ #define _SEQQUEUE_H_ #define QUEUE_MAX 15 t ...

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

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

  5. C语言指针的高级操作

    C语言指针的高级操作 指针  指针 在上篇博客中我介绍了C语言指针的最基本操作,那么我在这篇博客中会介绍一下C语言指针的一些骚操作. 指向指针的指针 这名字乍一听有点拗口,再次一听就更加拗口了.先看定 ...

  6. C语言利用二叉树的操作实现根据给定的字符串生成二叉树并前序、中序、后序输出二叉树。

    C语言利用二叉树的操作实现根据给定的字符串生成二叉树并前序.中序.后序输出二叉树. Description 根据给定的字符串生成二叉树并前序.中序.后序此二叉树. Input 给定一字符串,其中#表示 ...

  7. linux u8 u16 u32 u64,C 语言printf打印各种数据类型的方法(u8/s8/u16/s16.../u64/doub

    C 语言printf打印各种数据类型的方法(u8/s8/u16/s16.../u64/doub C 语言printf打印各种数据类型的方法(u8/s8/u16/s16.../u64/double/fl ...

  8. C语言的取反操作(15)

    C语言的取反操作由于取两次复原.所以经常用于加密系统: /**/ /************************************************************  Copy ...

  9. c语言快速复数的比较大小,c语言中的复数操作

    c语言中的复数操作 发布时间:2020-06-17 14:23:06 来源:亿速云 阅读:391 作者:鸽子 复数在数学运算中十分重要,在编写数值运算或者算法的时候,我们会用到复数这种概念. 那么,复 ...

最新文章

  1. python正确的赋值语句-Python 赋值语句技巧之序列解包
  2. php项目自动布署mysql_如何自动化一键部署PHP项目
  3. 安装discuz论坛mysqli解决方法
  4. Manjaro下带供电的USB Hub提示error -71
  5. TypeError: 'function' object is not subscriptable
  6. 安装后添加没有class library_Catalina的L/E Kext驱动安装方式
  7. python学习笔记5—数据类型转换
  8. 自媒体时代的贤内助——AI 视频云
  9. 计算机专业和文秘专业哪个好,文秘类包括哪些专业
  10. ios category类别的使用
  11. android canvas_Android 自定义View篇(七)实现环形进度条效果
  12. cisco独臂路由(即单臂路由)的配置
  13. 数据结构C语言版 学习整理
  14. Ruby 的 FileUtils 模块
  15. ir2104s的自举电容_有关IR2104的自举电容和NMOS选择问题 - 图文 -
  16. 麦氏细菌浊度分析仪的校准物质选择
  17. 最近 火火火 的 GitHub 项目!
  18. Becky!客户端Hotmail/outlook邮箱设置方法
  19. 申请 app store 退款
  20. 很多人说单片机很简单。但本专业学生都认为单片机是最难学的课程。为什么学起来都这么吃力呢?

热门文章

  1. Farthest Point Sampling(最远点采样)
  2. react项目搭建及相关依赖包引入
  3. 实训第 3 天 ------ 7.17
  4. 毕设四:老年人摔倒检测及报警装置
  5. ArrayList初始创建设定长度问题
  6. Unity Shader学习一:矢量的点积和叉积
  7. 计算机应用大专成绩表,毕业生成绩单样表
  8. 一、K3 WISE 开发插件《K3 WISE常用数据表整理》
  9. 机器图像识别常用算法,图像对比识别技术
  10. mac下查看chrome,cef web缓存