C语言之printf函数的用法

C语言之printf函数的用法

——TechZone(Harris)


​ printf,即格式化输出,是C语言中常用的输出函数。本节内容咱们就来讲讲关于这个函数的一些用法。

​ 我们在《第一个C语言程序》中有粗略地提到了printf函数,小伙伴们应该也对这个函数有了一个大致的了解,大概知道了是用来输出数据用的。但是,我们既然说它是个函数,那么就应该有挺多丰富的用法等着我们来发掘。那我们就一起来看看到底有哪些方法。

初窥门径

​ 我们还是从那个最简单的C语言程序开始:

#include <stdio.h>
int main(void)
{
    printf("Hello, world!\n");
    return 0;
}

printf函数有个括号,那么这个函数的所有参数都是放在这个括号里面的。什么意思呢,printf这个函数就像是一个工具,这个工具有许许多多的功能。如何去设置这个工具,让它达到我们想要的效果,就只需要把我们的想法写在括号里就完事儿啦。

​ 但是呢,这个工具并没有搭载目前最新最火的人工智能,比如你这么写
printf(让"Hello, world!\n"这个东西给劳资居中),这样肯定不行,因为printf看不懂呀。只有写出它看得懂的东西,它才会听话,乖乖给我们工作。你要是说些它听不懂的,那它就直接罢工不干啦,你就跟老板解释去吧!(printf:别说人话了,我听不懂)

正式开始

​ 既然想要函数听懂我们在说什么,就要遵循它的方式。那么我们先来了解下printf的通式:

printf(输出框架*格式化设置,附加参数)

参数解析

  • 输出框架

    ​ 我们上面那个printf("Hello, world!\n")中,就只用到了输出框架这一个参数。有的小伙伴可能会问了,我们看到的全部内容不就是引号里面的吗?咋叫框架呢?

    ​ 其实不然,我们还只用了一个参数,别急,后面大家就知道啦。

  • 格式化设置

    ​ 这个星号其实是没有的,这里只是告诉大家这两个参数之间是连接起来的,需要空格。

    ​ 此处的语法通式为:
    %[标志] [宽度] [精度] [长度修饰符] 转换字符

    ​ 其中,带中括号的是可选参数带的是必选参数

    1. 转换字符:

      字符 含义
      c char;字符
      d int;带符号的十进制整数
      i 同上
      e double;以指数形式输出单、双精度浮点数
      E 同上
      f double;以小数的形式输出单、双精度浮点数(指数显示小写e)
      g double;以%f或%e中较短的一种方式输出单、双精度浮点数(指数显示小写e)
      G 同上,指数显示大写E
      o unsigned int;无符号八进制(无前导0)
      s char;字符串
      u int;无符号十进制
      x unsigned int;无符号十六进制(无前导0x)
      X 同上(无前导0X)
      p void;指针值
      n int;用于存放已写字符的个数到变量,不用于输出
      % 不进行参数转换;%本身
  1. 标志:

    标志 含义
    - 指定被转换的参数在其字段内左对齐(默认是右对齐)
    + 给数加上正负号
    [空格] 若非负数则加上空格
    0 对于数值转换,当输出长度小于字段宽度时,添加前导0补充
    # 指定另一种输出方式
    1. 若转换字符为o,则第一个数为0
    2. 若转换字符为x或X,则在输出的非零值前加0x或0X
    3. 对于转换字符为e、E、f、g或G,则输出的数总包含一个小数点。
    另外,对于转换字符g或G,还将尾部无意义的0保留
  2. 宽度:

    转换后的参数输出宽度至少达到这个值,若不足则在左边或右边填补空格或者0。具体看标志的设置,若无,默认左边填充空格。

  3. 精度:

    这里要声明一下,只有这个参数前面是要加点号"."来分隔的,

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

    对于整数,它指定打印字符的位数,必要时加0来填补。

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

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

  4. 长度修饰符:

    修饰符 含义
    hh 按signed char或unsigned char类型输出
    h 按short或unsignedshort输出
    l 按long或unsigned long输出
    ll 按long long或者unsigned long long输出
    L 按long double类型输出
  • 附加参数

    所谓附加参数,笔者也不做过多解释。假设我有一个变量c,在int c=3之后,我想要输出c的值,该怎么办呢?

    有的小伙伴很聪明,立马说,Harris!我知道,这样不就行了:

    #include <stdio.h>
    int main(void)
    {
        int c=3;
        printf("C=3\n");
        return 0;
    }
    

是的,这样做没错。我们的确正确输出了整型变量c的值。但是,我们写程序,很多时候时为了方便不懂程序的人来使用的。我们知道c的值,那是因为我们看得懂代码。

如果我要你输出刚才用户输入的值,你怎么办呢?那么这个时候,附加参数就大显神威了。

#include <stdio.h>
int main(void)
{
    int c=3;//这里假定用户已经输入了值
    printf("C的值为%d",c);
    return 0;
}

看到了吧。这里就把动态的变量c嵌入到语句里面输出了。

看到这里我相信小伙伴们应该也明白了为啥我之前说引号里面的是框架了。这就是所谓的格式化输出,是不是有点只可意会不可言传的感觉呢?

今天的内容基本就到这里结束啦。不过Harris在这里给大家留个悬念,大家可以自己回去自己的编译器上实验一下,看看能不能理解输出的结果?具体原理以后会讲,所以不理解没关系,学好上面的内容就很棒啦!

#include <stdio.h>
int main(void)
{
    char C = 'c';
    printf("%c=%d",C,C);
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容