C语言(输入printf()函数)

news2025/1/10 23:31:59

 

printf()的细节操作很多,对于现阶段的朋友来说,主要还是以理解为主。因为很多的确很难用到。

目录

一.转换说明(占位符)

二.printf()转换说明修饰符

1.数字

2.%数字1.数字2

3.整型转换字符补充

4.标记

-符号

+符号

空格符号

#符号

0符号

5.*修饰符

三.转换不匹配(很重要,尽量理解)

四.printf()返回值

五.printf打印较长的字符串

1.分成多个printf()进行打印

2.在字符串中使用反斜杠(\)和Enter键盘组合来断行

3.把字符串分为多个字符串,printf在打印时候会自动把字符串进行连接打印

一.转换说明(占位符)

printf("My favorite number is %d because it is first.\n",num);  //打印字符串,将num变量存储的1替换到 %d 的位置上。这里的%d就是占位符(转换说明),下面我将列出我们能使用到的基本多有转换说明

%a

浮点数十六进制P记数法

%c

单个字符

%d

有符号十进制数

%i

有符号十进制整数(与%d相同)

%e

浮点数,e记数法

%f

浮点数,十进制记数法

%g

根据值的不同,自动选择%f,%e

%o

无符号八进制整数

%p

指针

%s

字符串

%u

无符号十进制整数

%x

无符号十六进制整数

%%

打印%

%zd

sizeof()和strlen的返回类型

这快大家根据打印数据类型选择就好了。我们下面将重点介绍转换说明修饰符

二.printf()转换说明修饰符

printf()的转换说明修饰符是插入在% 字母之间的

1.数字

表示最小字段宽度。如果字段无法容纳待打印的数字或字符串,系统会使用更宽的字段。

首先是%3d,这里a只有1,但3规定了字段为3,所以在最后的打印中1前面补了2个空格。%10s同样的道理,因为hello只有五个字段宽度,所以打印时前面补了5个空格。

然后是%3s,因为hello是5个字段宽度。所以满足3这个最小字段宽度,正常打印就好了。

2.%数字1.数字2

数字1用于表示最小字符宽度(就算上面那个效果)

数字2:

对于%e,%f转换,表示小数点右边数字的位数

对于%g,表示有效数字最大位数

对于%s,表示待打印字符的最大数量

对于整数,表示待打印数字的最小位数

首先是%1.3e和%1.3f,这里我们看到不管是数字计数法还是指数计数法,小数点后都只有三位数。

%1.3g,首先解释下最大位数就算不包括小数点所展示出来的数。所以只显示了1.11只有三个数字。

%1.3s,规定了最多显示三个字符,所以只打印了hel

%1.3d,整数的数字2和数字1功能一样,只不过前者用0填充空缺,后者用空格填充空缺

3.整型转换字符补充

其实这个我们在前面基本也都遇到了,我们先来总体看看

h

基本使用%hd,就是short的占位符

j

表示intmax_t或uintmax_t类型的值。而这些值就定义在stdint.h中。而intmax_t就算long long数据类型别名,uintmax_t就算unsigned long long 的别名,用lld和llud都可以。

ll

lld表示long long int

t

表示ptrdiff_t类型的值。Ptrdiff_t是两个指针差值的类型

z

表示size_t类型的值。就算sizeof和strlen类型的返回值。

除了t的其他的我们都讲过了,所以这里重点介绍指针差值。其实看到图你基本就能看出来其实用%d也可以,只不过会警报。所以如果你实在搞不懂该用哪种返回类型,直接用%d就行,如果结果不对就%ld。

4.标记

标记一共有五种。分别为-,+,空格,#,0;

-

待打印项左对齐(从字段的左侧开始打印该项)

+

符号值若为正,则在值前面显示加号。若为负,则在值前面显示减号

空格

符号值若为正,则在值前面显示空格。若为负,则在值前面显示减号并覆盖空格

#

把结果转换为另一种心事。%0,则以0开始。如以%下,则以0x先开始。对于浮点数类型,#保证了即使后面没有任何数字,也打印一个小数点字符。对于%g,#防止结果后面的0被删除。

0

对于数值,用前导0代替空格填充字段宽度。如果已经出现-标记,则忽略0标记

首先

-符号

+符号

和直接使用%d的区别在于,整数前面会加个+号

空格符号

红下划线那里有一个前导零

#符号

这里重点讲解下%.0f和%.0f。为了表现对于浮点数类型,#保证了即使后面没有任何数字,也打印一个小数点字符。如果不加.0这个修饰符就看不出效果,它会自动算出小数点后6位(如下图所示)

0符号

首先来看红下划线,%10d里面一共有2个修饰符,一个0,另一个10(最小字段宽度),所以前导都用0填充,这个效果用%.10d是一样的

黄色下划线部分,有三个修饰符,-(左对齐),0(因为-的存在自动省略),10(最小字段宽度)

5.*修饰符

用变量值代替*号部分

可以看到

printf("%*d",number,rv)我们用number变量代替*位置,rv代替d位置

我们这里输入了5,在因为是整数类,所以会打印5位数,4个空格加数字1

三.转换不匹配(很重要,尽量理解)

第一行:num变量对应转换说明 %hd 和 %hu的输出都是336,因为%hd对应short和unsigned short它们内部存储的位是一样的,且都是正好,所以不会出现转化不匹配的情况(这就是一个正常情况)

第二行:mnum变量对应的转换说明%hd 有符号的short,所以-336正常,而%hu为无符号的short,又遇到赋值,这里就会出现打印65200数值情况,并非期望的336。这事由于short int类型的值在外面的参考系统中的表示方式所致。

首先,short int的大小是2字节,其次,系统使用二进制补码来表示有符号整数(这个外面在后面会进行讲解的)。这种情况下,0~32767表示正数部分,32768~65535则用于表示负数,其中,65535表示-1,65534为-2,所以-336就为65200.

这里需要知道,当要解释为有符号int,65200代表-336.被解释为无符号int时,65200则就表示65200

第三行:short int时二字节,char是1字节。当printf()使用%c打印336是,它只会查看存储336的2字节中的后1字节。相当于”以256为模“,即该数字除以256后取其玉树,336%256为80,对应P

最后一行和第三行原理一样,%d用4个字节,%hd用2个字节,%c用一个字节

这里我们在来看一个例子,

在使用%le,打印时,会取8个字节的空间,而long只占4个字节空间,这就导致它会取后面四个字符的其他空间值,最终形成的一个乱值。

四.printf()返回值

它将返回打印字符的个数。如果有输出错误,printf()则返回一个负值

五.printf打印较长的字符串

在日常当然遇到打印较长字符串的时候,一半有三种解决。这边我们以打印字符串"Today is the New Year. I wish you good health, career and study in the new year"为例。

1.分成多个printf()进行打印

2.在字符串中使用反斜杠(\)和Enter键盘组合来断行

3.把字符串分为多个字符串,printf在打印时候会自动把字符串进行连接打印


好了朋友们我们今天的内容到这就结束了,今天的内容到这里就结束了,如果有啥不会的朋友记得论坛里面提问哈~

如果朋友你感觉文章的内容对你有帮助,可以点赞关注文章和专栏以及关注我哈,嘿嘿嘿我会定期更新文章的,谢谢朋友你的支持哈

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/337635.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaWEB必知必会-Servlet

目录 Servlet简介Servlet快速入门Servlet配置详解ServletContext 1 Servlet简介 Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求、响应给浏览器的动态资源。但servlet的实质就是java代码&a…

电脑里的连接速度双工模式是什么?怎么设置

双工模式包括全双工、半双工模式。1.半双工1、半双工数据传输允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信。所谓半双工就是指一个时间段内只有一个动作发生。早期的对…

十二、Linux文件 - fseek函数讲解

目录 一、fseek函数讲解 二、fseek函数实战 一、fseek函数讲解 重定向文件内部的指针 注:光标 ---- 文件内部的指针 函数原型: int fseek(FILE *stream,long offset,int framewhere) 参数: stream:文件指针offset:…

golang由浅入深

简介 Go语言(Golang)是由Google公司的Robert Griesemer、Rob Pike、Ken Thompson三位工程师开发的一种静态强类型、编译型、并发型、快速运行的编程语言。 Go语言诞生于2007年,旨在创造一种具有现代特性的编程语言,可以替代C和Jav…

DS期末复习卷(二)

选择题 1.下面关于线性表的叙述错误的是( D )。 (A) 线性表采用顺序存储必须占用一片连续的存储空间 (B) 线性表采用链式存储不必占用一片连续的存储空间 © 线性表采用链式存储便于插入和删除操作的实现 (D) 线性表采用顺序存储便于插…

2023春招100道软件测试高频面试题

给大家整理了2023春招的100道软件测试高频面试题,篇幅较长,所以只放出了题目,答案在文末,自行获取哦! 1.项目测试流程你是怎么开展的? 2.接口测试用例的编写要点有哪些? 3.APP测试和Web测试有…

ubuntu20.04安装docker与docker-compose

安装docker 查看系统发行版本 cat /proc/version1、更新apt包 sudo apt-get update2、安装必备的软件包以允许apt通过 HTTPS 使用存储库(repository): sudo apt-get install ca-certificates curl gnupg lsb-release3、添加Docker官方版本…

C语言学习笔记(一):了解C语言

什么是C语言 C语言是一种高级编程语言,最早由丹尼斯里奇在1972年开发。它是一种通用编程语言,提供了高级编程语言的方便和易用性,同时又有较低级别的编程语言的灵活性和效率。C语言在许多操作系统、编译器和应用程序开发中广泛使用&#xff…

使用Naticat同步数据库结构

现象: 开发环境对数据库结构进行了修改,如何同步到测试环境 例: 开发环境(dev):my_test_data 测试环境(test):my_test_data_1 方法: 使用Naticat同步两个数据库结构 选中…

PLC是什么?PLC相关知识小科普

欢迎各位来到东用知识小课堂1.PLC是什么:●PLC就是可编程控制器,它应用于工业环境,必须具有很强的抗干扰能力、广泛的适应能力和应用范围。●PLC是“数字运算操作的电子系统”,也是一种计算机,它是“专为在工业环境下应…

EdgeX Foundry (一)安装和部署

系统版本uname -rdocker 版本docker --versiondocker-compose版本安装参考链接:https://blog.csdn.net/chezong/article/details/128917107拉取edgex foundry 配置文件 docker-compose.yml; curl https://raw.githubusercontent.com/edgexfoundry/edgex-compose/ire…

【C语言学习笔记】:通讯录管理系统

系统中需要实现的功能如下: ✿ 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人 ✿ 显示联系人:显示通讯录中所有的联系人信息 ✿ 删除联系人:按…

冒泡排序详解

冒泡排序是初学C语言的噩梦,也是数据结构中排序的重要组成部分,本章内容我们一起探讨冒泡排序,从理论到代码实现,一步步深入了解冒泡排序。排序算法作为较简单的算法。它重复地走访过要排序的数列,一次比较两个元素&am…

信道建模(大尺度、小尺度、莱斯衰落、瑞利衰落、莱斯信道、瑞利信道)

一、大尺度衰落与小尺度衰落 大尺度衰落由收发两端的距离决定,功率上建模为: 小尺度衰落由收发两端的环境决定,比如是否有遮挡,场景有室内、室外、平原、山村、城镇等,这些环境影响到收发两端是否有直达链路&#xff0…

电子电路中的各种接地(接地保护与GND)

前言多年以前,雷雨天气下,建筑会遭遇雷击,从而破坏建筑以及伤害建筑内的人,为了避免雷击的伤害,人们发明了避雷针,并将避雷针接地线,从而引导雷击产生的电流经过地线流入到地下。地线&#xff1…

传统目标检测实战:HOG+SVM

传统目标检测实战:HOGSVM 文章目录传统目标检测实战:HOGSVM1. 前言1.1 传统和深度1.2 何为传统目标检测1.3 传统目标检测方法不足2. 先验知识3. 项目框架3.1 文件架构3.2 方法简要介绍4. 工具函数(utils.py)5. 特征提取&#xff0…

我是如何转岗成为数据分析师?

Datawhale干货 作者:孟禹,数据分析师,Datawhale邀约作者笔者背景介绍:工作5年半,前4年在K12在线教育负责教研和用户转化,21年双减之后跳槽到一家新消费品牌公司做数据分析师,跨了行转了岗。现在…

领英LinkedIn的个人商务会员和企业销售会员我们应该怎么选?

在详细介绍领英LinkedIn会员之前先解释下为什么要开通。也就是领英免费用户会有哪些限制以至于我们需要付费去开通会员:1.有限的搜索次数使用免费的 LinkedIn 帐户,您将在一个月内搜索约 300 次后达到商业使用限制。一旦达到商业使用限制,您将…

SpringBoot学习笔记【part18】拦截器与文件上传

一、拦截器Interceptor 拦截器 Interceptor 多用于登录检查与静态资源放行场景。 拦截器的实现步骤 编写一个拦截器实现 HandlerInterceptor 接口 Slf4j public class LoginInterceptor implements HandlerInterceptor {/*** 目标方法执行之前*/Overridepublic boolean preHa…

Redis 分布式基础——主从复制其实挺简单

Redis 主从同步 redis-master-slave-index 一、主从复制是啥 主从复制,或者叫 主从同步,是指将一台 Redis 服务器的数据,复制到其他的 Redis 服务器。前者称为 主节点(master),后者称为 从节点(slave)。且数据的复制是 单向 的&…