(。・∀・)ノ゙嗨!大家好,我是呆博~很开心可以在这里给接着大家分享我的 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
本文作者: 独孤呆博