printf 详解 - 你所不知道的printf用法

这篇具有很好参考价值的文章主要介绍了printf 详解 - 你所不知道的printf用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系列文章目录

printf 详解 - 你所不知道的printf用法
scanf 详解 - 你所不知道的scanf用法
持续更新中…



一.printf的概念

定义: printf 是 (print format) 的缩写是指格式化输出函数,主要功能是向标准输出设备按规定格式输出信息

调用格式: printf("<格式化字符串>",<参量表>);

二.printf的使用

1.输出字符串

①直接输出字符串

输出格式 : printf("hello world!");

printf输出字符串的方式有很多,在我们最开始学习C语言时,我们会输出"hello world!",这样的方式属于直接输出字符串。它是根据'h'的地址向后一个一个进行打印,直到遇到'\0'才会停止,而"hello world!'\0'"其实是有'\0'的,只是被隐藏了,在这里我就不细讲了,后面我会出一期字符串的相关知识进行解释。当然我们也不需要这么复杂的去这样记,这里是为第二种输出方式做铺垫的。

②直接输出字符串变量

输出格式 : printf(str);

在这样输出之前我们要先做一件事情 char str[] = "hello world"; 我们需要先创建一个存储字符串的数组。这样创建的字符串"hello world!'\0'" 也是有'\0'在里面的,只是被隐藏了。在这里str所指向的是首字符h的地址,它也是通过str所指向的h的地址向后进行打印,直到遇到'\0'停止,这样的方法更为简单快捷,但我依然推荐后面要讲到的标准的输出格式。

③标准输出字符串

输出格式 : printf("%s", str);

这样的输出方式依然是要 char str[] = "hello world"; 先创建一个存储字符串的数组,然后通过这样的格式输出。这样输出能让读者这更清楚的读懂你这一步是要做什么事情,也有利于后期自己的阅读。

2.输出数字

①常规输出

在这里我们只需要先创建一个整形变量int num1 = 10; 和一个浮点型变量double num2;

输出格式 释义
printf("%d", num1); %d是以十进制的方式进行输出。
printf("%o", num1); %o是以八进制的方式进行输出。
printf("%x", num1); %x是以十六进制的方式进行输出。
printf("%u", num1); %u是将符号位默认为数值方式进行输出。
printf("%f", num2); %f是以浮点数的方式进行输出。

②十进制输出技巧

在这里我们只需要先创建两个整形变量int num = 10;int count = 5;

输出格式 释义
printf("%2d", num); %2d 它所表示占2个输出位置,数字靠右对齐,位数不足2个则在左边补空格
printf("%-2d", num); %-2d 它所表示占2个输出位置,数字靠左对齐,位数不足2个则在右边补空格
printf("%*d", count, num); %*d 表示占count = 5个输出位置,数字靠右对齐,位数不足5个则在左边补空格
printf("%-*d", count, num); %-*d 表示占count = 5个输出位置,数字靠左对齐,位数不足5个则在右边补空格
printf("%.4d\n", num); %.4d表示占4个输出位置,如果输出的内容不足4位则只在左边用零填充
printf("%04d\n", num); %04d表示占4个输出位置,如果输出的内容不足4位则只在左边用零填充

③八进制和十六进制输出技巧

在这里我们只需要先创建一个整形变量int num = 10;

输出格式 释义
printf("%#o\n", num); 输出八进制前面的0
printf("%#x\n", num); 输出十六进制前面的0x

三.常用转义字符

转义字符 释义
\’ 用于表示字符常量’
" 用于表示一个字符串内部的双引号
\\ 用于表示一个反斜杠,防止它被解释为一个转义序列符
\b 退格符
\f 进纸符
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
\ddd ddd表示1~3个八进制的数字
\xdd dd表示2个十六进制数字

五.深水炸弹

问题:下面这段代码的输出结果为多少

	printf("%d", printf("%d", printf("%d", 43)));

解答:

printf的返回值: printf函数的返回值是打印的所有字符的总数(包括转义字符)。

这道题令我印象极其深刻,我认为有必要拿出来专门讲一下。首先我们要思考printf("%d", 43) 的结果为多少?至少我第一次遇到的时候毫无头绪,但我们要知道 printf() 是一个函数,所以我们这里我们可以创建一个变量来接收这个值。

	int a = 12;
    a = printf("%d", 43);
    printf("\na = %d\n", a);

这里我创建了一个变量a来接收printf("%d\n", 43);的返回值,输出结果 a = 2 得到这个输出结果的时候我就有了一点才想,这么无厘头的值该不会是有几个数吧!当然现在我还不能确定,我于是又进行了几次尝试。

	//测试:当111的输出结果
    int a = 12;
    a = printf("%d", 111);
    printf("\n%d\n", a);

在几次尝试过后我确定了 printf() 的返回值确实是 “数字的个数” 。最后我通过分析这道题的输出结果为4321

补充:

	int a = printf("num=%d\n",43);
    printf("%d",a);	//		结果为7

原因:里面有7个字符(包括转义字符,%d被43所代替,视为两个字符)。

六.小结

正是因为这样一道题,我认为我有必要对于每个函数的特性进一步的学习和研究,所以也从这篇博客开始,我将持续更新C语言标准库函数的函数详解,如果我的内容中出现错误也很乐意接受批评指点,希望每个看到我博客的人都能从中有所收获,而非无功而返,当然我会回再接再厉继续更新更为优质的博客与大家一起分享一起进步。文章来源地址https://www.toymoban.com/news/detail-745278.html

到了这里,关于printf 详解 - 你所不知道的printf用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 你所不知道的 数据在内存中储存 的来龙去脉

            那么好了好了,宝子们,今天给大家介绍一下 “数据在内存中储存” 的来龙去脉,来吧,开始整活!⛳️          一、数据类型的介绍 (1)整型和浮点型:    (2)其他类型:    二、数据在内存中的储存顺序(大端 小端)   (1)引入字节序: 字节序

    2024年02月06日
    浏览(68)
  • 你所不知道的ASP.NET Core进阶系列(三)

    一年多没更新博客,上一次写此系列还是四年前,虽迟但到,没有承诺,主打随性,所以不存在断更,催更,哈哈,上一篇我们细究从请求到绑定详细原理,本篇则是探讨模型绑定细节,当一个问题产生到最终解决时,回过头我们整体分析其产生背景以及设计思路才能有所获

    2024年02月05日
    浏览(93)
  • 你所不知道的 GitHub 快捷键及实用技巧

    目录 一、 搜索 1. 快捷键 S 或 / , 聚焦搜索栏 2. 高级搜索 2.1 按 star 数查询 2.2 按 fork 数查询 2.3 按 topic 数查询 2.4 按时间查询 2.5 按作者查询 2.6 排除特定内容 二、网页快捷键 1. GitHub 全局快捷键 1.1 快捷键 S 或 / , 聚焦搜索栏 1.2 快捷键 G + N,跳转到消息页 1.3 快捷键

    2023年04月08日
    浏览(73)
  • 你所不知道的NVMe SSD固态硬盘读写速度及国货的惊喜--基于FPGA的速度测试

      在\\\"FPGA实现高带宽NVMe SSD读写\\\"帖子中介绍了项目背景及系统架构、FPGA实现NVMe读写的大致实现方法。项目中需要将图像传感器产生的高速数据流实时稳定的持续存储,即不仅要求较高的存储带宽,还同时需要该存储带宽保持始终稳定、持续。   在项目做系统设计的时候

    2024年02月06日
    浏览(61)
  • C语言(输入输出函数getchar,putchar、gets、puts,scanf,printf的功能以及用法)

    int getchar( void ); 返回值为int,所以需要用一个int变量来接收,不管输入几个字符,每次都只接收第一个字符,常与while和putchar配合使用。 从下面这张图可以看出,输入一个空格也会打印 当然,获取一个字符用得不多,每次都需要获取一串,所以我们可以配合while来使用。 用

    2024年02月02日
    浏览(50)
  • 你所不了解的静态路由特点及配置分析

     许多读者朋友错误地认为静态路由很简单,就一个命令,没什么好学的。其实这是因为他们根本没有深入理解静态路由的工作原理,对于仅有一条静态路由配置命令中的各参数和选项的含义和使用方法也是一知半解,结果造成的是遇到一些静态路由故障时无法进行分析,而

    2024年02月06日
    浏览(34)
  • C语言格式化输出函数printf详解——C语言基础知识

    (由于篇幅较长,内容较全,建议收藏) printf函数的一般格式为: printf(格式控制字符串,输出值参数表); 如: 其中, f=%f,c=%fn 是 格式控制字符串 , f,c 是 输出值参数表 。 (1)格式控制字符串是用双引号括起来的字符串,包括三类信息: 格式字符。格式字符由“%”

    2023年04月08日
    浏览(42)
  • 【printf函数的具体用法】

    1、基本输出语句 printf()函数是C语言的输出函数,功能是按指定的输出格式把相应的参数值在标准的输出设备中显示出来。 printf(格式控制串,参数1,参数2,…),可能这样写出的格式不好理解,现在细分一下类型,其中可分为四种格式: 1、字符串型 printf(“字符串n”) 以上

    2024年02月16日
    浏览(62)
  • 《C和指针》笔记6:gets/puts/scanf/printf/getchar函数用法

    本博客可以了解一些gets/puts/scanf/printf/getchar函数的基本用法。 gets 函数从标准输入读取一行文本并把它存储于作为参数传递给它的数组中。 一行输入由一串字符组成,以一个换行符(newline)结尾 。 gets 函数 丢弃换行符 ,并在该行的末尾存储一个NUL字节(一个NUL字节是指字节模

    2024年02月11日
    浏览(51)
  • C语言printf函数实现解读

    gun官网链接 按照这些步骤可以顺利的下载gnu的c语言源码,接下去我们看看printf函数。 用vscode打开下载的源码,找到printf函数。 ( printf 函数路径为: glibc-2.36stdio-commonprintf.c ) 源码如下: 可以看见主要是四个东西: va_list   va_start   va_end   __vfprintf_internal 前面三个先不看

    2024年02月12日
    浏览(80)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包