C语言 printf 函数多种输出格式以及占位输出

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一、输出格式

  在C语言中,printf 函数提供了多种输出格式,用于控制不同类型数据的输出方式。

1.整数输出格式
%d:以十进制形式输出整数。
%o:以八进制形式输出整数(无前导0)。
%x 或 %X:以十六进制形式输出整数(小写x表示小写字母,大写X表示大写字母)。
%u:以无符号十进制形式输出整数。
字段宽度和精度:可以在%和格式字符之间插入一个数字来指定字段宽度(即输出的最小宽度)(默认右对齐如果数值的位数小于指定的字段宽度,那么输出将在左侧用空格填充。(除非使用了负号-,表示左对齐,这时将在右侧填充空格)。

2.浮点数输出格式
%f:以标准的小数形式输出浮点数。
%e 或 %E:以科学计数法形式输出浮点数(小写e表示小写字母,大写E表示大写字母)。
%g 或 %G:自动选择%f或%e格式中较短的一种输出,且不输出无意义的零。
字段宽度和精度:可以通过 %m.nf 的形式来指定输出的字段宽度 m 和小数点后的位数 n。如果省略 m,则宽度由系统决定;如果省略 n,则默认为6位小数

3.字符输出格式
%c:输出一个字符。
字段宽度:可以使用 %mc 的形式来指定输出的字符宽度。如果字符的ASCII码值对应的字符宽度小于指定的宽度,则会在左侧或右侧(取决于是否使用-)填充空格以达到指定的宽度。

4.字符串输出格式
%s:输出一个字符串。
字段宽度和精度:可以通过 %ms、%-ms、%m.ns、%-m.ns 的形式来指定输出的字符串宽度和精度。m指定字段宽度,n指定从字符串左侧开始输出的字符数。如果省略n,则输出整个字符串。

5.其他
%n:将已打印字符数保存在整型指针所指向的变量中。这通常用于统计printf函数的输出字符数。
转义字符:如 \n(换行)\t(制表符) 等,用于在输出中插入特殊字符。

6.修饰符
l 或 L:用于输出长整型(long)或长双精度浮点数(long double)。例如,%ld用于输出long型整数,%Lf:用于输出long double型浮点数。
h:用于输出短整型(short)。例如,%hd用于输出short型整数。

7.标志
-:左对齐输出。
+:对于整数,总是输出符号(正号或负号)。
空格:对于整数,如果为正数,则在其前面加一个空格;如果为负数,则输出负号。
#:对于o(八进制)和x(十六进制)格式,总是在输出的数前面加上0或0x/0X前缀。
这些输出格式和修饰符可以组合使用,以控制 printf 函数的输出格式。

二、占位输出

在C语言中,使用printf函数时,可以通过格式说明符来指定输出的位数。对于整数,可以使用字段宽度和精度说明符来控制输出的格式。虽然精度通常用于浮点数,但字段宽度对于整数和浮点数都是有用的。对于整数,可以使用%d、%x或%o等来说明符,并在它们前面添加一个数字来指定字段的最小宽度。如果数值的位数小于指定的字段宽度,那么输出将在左侧用空格填充除非使用了负号-,表示左对齐,这时将在右侧填充空格)。
整型:

%2d:如果数值的位数小于指定的字段宽度,那么输出将在左侧用空格填充
%02d:如果数值的位数小于指定的字段宽度,那么输出将在左侧用0填充

指定字段宽度(右对齐)

#include <stdio.h>  int main(void) 
{  int num = 255;  printf("Decimal: %5d\n", num);  // 输出:Decimal:   255(前面有2个空格)  printf("Hexadecimal: %8x\n", num); // 输出:Hexadecimal:     ff(前面有6个空格) printf("Decimal: %05d\n", num);  // 输出:Decimal:   255(前面有2个0)  printf("Hexadecimal: %08x\n", num); // 输出:Hexadecimal:     ff(前面有6个0) return 0;  
}

在这里插入图片描述
指定字段宽度并左对齐

#include <stdio.h>  int main(void) 
{  int num = 255;  printf("1:右对齐,不足左侧补0\n");	printf("Decimal:\n%05d\n", num);  // 输出:Decimal:   255(前面有2个0)  printf("Hexadecimal:\n%08x\n", num); // 输出:Hexadecimal:     ff(前面有6个0)printf("2:右对齐,不足左侧补空格\n");	printf("Decimal:\n%5d\n", num);  // 输出:Decimal:   255(前面有2个空格)  printf("Hexadecimal:\n%8x\n", num); // 输出:Hexadecimal:     ff(前面有6个空格)printf("3:左对齐,不足右侧补空格\n");printf("Decimal:\n%-5d\n", num);  // 输出:Decimal: 255  (后面有2个空格)  printf("Hexadecimal:\n%-8x\n", num); // 输出:Hexadecimal: ff    (后面有6个空格)  return 0;  
}

在这里插入图片描述
对于浮点数,可以同时指定字段宽度和精度
精度用于指定小数点后的位数,而字段宽度用于指定整个数字(包括小数点和符号)的最小宽度。

#include <stdio.h>  int main(void) 
{  float pi = 3.14159265;  printf("Pi:%7.2f\n", pi);  // 输出:Pi:0003.14(整个数字宽度为7,小数点后有2位)右对齐printf("Pi:%07.2f\n", pi);  // 输出:Pi:   3.14(整个数字宽度为7,小数点后有2位)右对齐printf("Pi:%-7.2f\n", pi);  // 输出:Pi:3.14   (整个数字宽度为7,小数点后有2位)左对齐return 0;  
}

在这里插入图片描述
使用 * 作为字段宽度或精度的占位符
使用 * 作为字段宽度或精度的占位符,并在 printf 的参数列表中提供一个整数来指定实际的宽度或精度。允许在运行时动态地设置这些值。

#include <stdio.h>  int main(void) 
{  int num = 255;  int width = 8; printf("Decimal:%0*d\n", width, num); // 输出:Decimal:     255(前面有5个0)printf("Decimal:%*d\n", width, num); // 输出:Decimal:     255(前面有5个空格)printf("Hexadecimal:%0*x\n", width, num); // 输出:Hexadecimal:     ff(前面有6个0) printf("Hexadecimal:%*x\n", width, num); // 输出:Hexadecimal:     ff(前面有6个空格) printf("Decimal:%-*d\n", width, num); // 输出:Decimal:     255(后面5个空格)printf("Hexadecimal:%-*x\n", width, num); // 输出:Hexadecimal:     ff(后面有6个空格)   return 0;  
}
//在这个例子中,%*x 中的 * 表示字段宽度将从参数列表中获取,即width变量的值。

在这里插入图片描述

其它,分配一个足够大的字符串并打印字符串格式内容

#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>char *make_message(const char *fmt, ...)
{int size = 0;char *p = NULL;va_list ap;/* Determine required size */va_start(ap, fmt);size = vsnprintf(p, size, fmt, ap);va_end(ap);if (size < 0)return NULL;size++;             /* For '\0' */p = malloc(size);if (p == NULL)return NULL;va_start(ap, fmt);size = vsnprintf(p, size, fmt, ap);va_end(ap);if (size < 0) {free(p);return NULL;}return p;
}int main(int argc,char *argv[]) 
{ char *p=make_message(argv[1]);if(p !=NULL){printf("%d\n%*s\n",(int)strlen(p),(int)strlen(p),p);}return 0;  
}

在这里插入图片描述

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

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

相关文章

EAI四个层次服务-系统架构师(二十六)

1、&#xff08;重点&#xff09;系统应用集成提供了4个不同层次服务&#xff0c;最上层服务是&#xff08;&#xff09;服务。 解析: EAI&#xff08;Enterprise Application Integration&#xff09;系统应用集成&#xff0c;相关概念。 实施EAI必须保证&#xff1a;应用程…

星间链路与星地链路

目录 一、星间链路 1.1 层内星间链路&#xff08;Intra-layer ISLs&#xff09; 1.2 层间星间链路&#xff08;Inter-layer ISLs&#xff09; 1.3 实现方式 1.3.1 微波链路 1.3.2 激光链路 二、星地链路 2.1 星地链路的关键特性 2.1.2 Ka信关站 2.1.2 Q/V信关站 2.1…

JavaScript中,正则表达式所涉及的api,解析、实例和总结

JS中正则的api包括以下&#xff1a; String#searchString#splitString#matchString#replaceRegExp#testRegExp#exec 1. String#search 查找输入串中第一个匹配正则的index&#xff0c;如果没有匹配的则返回-1。g修饰符对结果无影响 var string "abbbcbc"; var r…

谷粒商城学习笔记-使用renren-fast-vue框架时安装依赖包遇到的问题及解决策略

文章目录 1&#xff0c;npm error Class extends value undefined is not a constuctor or null2&#xff0c;npm warn cli npm v10.8.1 does not support Node.js v16.20.2.3&#xff0c;npm error code CERT_HAS_EXPIRED学习心得 这篇文章记录下使用renren-fast-vue&#xff…

QT学习(6)——QT中的定时器事件,两种实现方式;事件的分发event,事件过滤器

目录 引出定时器事件QTimerEventQTimer 事件的分发事件过滤器 总结QT中的鼠标事件定义QLable的鼠标进入离开事件提升为myLabel重写QLabel的函数鼠标的事件鼠标的左中右键枚举鼠标多事件获取和鼠标移动鼠标追踪 QT中的信号和槽自定义信号和槽1.自定义信号2.自定义槽3.建立连接4.…

C++ 类和对象 拷贝构造函数

一 拷贝构造函数的概念&#xff1a; 拷贝构造函数是一种特殊的构造函数&#xff0c;用于创建一个对象是另一个对象的副本。当需要用一个已存在的对象来初始化一个新对象时&#xff0c;或者将对象传递给函数或从函数返回对象时&#xff0c;会调用拷贝构造函数。 二 拷贝构造函…

打卡第6天----哈希表

每天进步一点点,滴水石穿,日积月累,不断提升。 数组和链表章节告一段落。开启哈希表相关的。 哈希表能解决什么问题呢,一般哈希表都是用来快速判断一个元素是否出现集合里 一、有效的字母异位词 leetcode题目编号:242 题目描述: 给定两个字符串 s 和 t ,编写一个函数…

Linux忘记密码重置root密码、重置普通用户密码

重启看到选项按e reboot 或 init 62、移动到Linux开头的行在末尾添加 rw init/bin/bash3、按下Ctrlx引导启动 mount -o remount,rw /输入命令回车更改密码,输入新密码&#xff0c;别用小键盘&#xff0c;容易出错 passwd输入两次校验&#xff0c;出现updated successfully就…

OceanBase 配置项系统变量实现及应用详解(1):配置项的定义及使用方法

《OceanBase 配置项&系统变量实现及应用详解》专题导读 在使用OceanBase的过程中&#xff0c;看到大家经常会遇到“参数”、“配置项”、“系统变量”等概念&#xff0c;却不太清楚它们是不是同一个东西&#xff0c;以及应该如何使用。一些对数据库开发感兴趣的朋友&#…

【面向就业的Linux基础】从入门到熟练,探索Linux的秘密(九)-git(1)

Git是一个版本管理控制系统&#xff08;缩写VCS&#xff09;&#xff0c;它可以在任何时间点&#xff0c;将文档的状态作为更新记录保存起来&#xff0c;也可以在任何时间点&#xff0c;将更新记录恢复回来。 文章目录 前言 一、git是什么 二、git基本概念 三、git基本命令 总结…

电商项目中分与元金额单位互转实战

在Java开发中&#xff0c;可能遇到金额单位的转换&#xff0c;比如本系统用分作为金额的基本单位&#xff0c;对方系统用元作为金额的基本单位&#xff0c;这就需要进行单位转换&#xff0c;记录下来&#xff0c;方便备查。 一、分转元 分转元&#xff0c;分到元相差两位&…

PHP源码:新闻门户系统(附管理后台+前台)

一. 前言 今天小编给大家带来了一款可学习&#xff0c;可商用的&#xff0c;新闻门户系统 源码&#xff0c;支持二开&#xff0c;无加密。项目可以扩展为个人博客&#xff0c;和一些社交论坛网址。主要功能&#xff1a;支持文章管理&#xff0c;评论管理&#xff0c;分类管理等…

Kotlin linkedMapOf filterKeys

Kotlin linkedMapOf filterKeys fun main(args: Array<String>) {val lhm linkedMapOf<String, Any>(Pair("name", "phil"), //因为key相同都为 name&#xff0c;被后面的覆盖。Pair("year", 2024),Pair("name", "f…

大语言模型的应用探索AI Agent初探!

前言 大语言模型的应用之一是与大语言模型进行聊天也就是一个ChatBot&#xff0c;这个应用已经很广泛了。 接下来的一个应用就是AI Agent。 AI Agent是人工智能代理&#xff08;Artificial Intelligence Agent&#xff09;的概念&#xff0c;它是一种能够感知环境、进行决策…

消防认证-防火窗

一、消防认证 消防认证是指消防产品符合国家相关技术要求和标准&#xff0c;且通过了国家认证认可监督管理委员会审批&#xff0c;获得消防认证资质的认证机构颁发的证书&#xff0c;消防产品具有完好的防火功能&#xff0c;是住房和城乡建设领域验收的重要指标。 二、认证依据…

Websocket在Java中的实践——整合Rabbitmq和STOMP

大纲 Rabbitmq开启STOMP支持 服务端依赖参数参数映射类配置类逻辑处理类 测试测试页面Controller测试案例 在《Websocket在Java中的实践——STOMP通信的最小Demo》一文中&#xff0c;我们使用enableSimpleBroker启用一个内置的内存级消息代理。本文我们将使用Rabbitmq作为消息代…

【Unity2D 2022:Particle System】添加拾取粒子特效

一、创建粒子特效游戏物体 二、修改粒子系统属性 1. 基础属性 &#xff08;1&#xff09;修改发射粒子持续时间&#xff08;Duration&#xff09;为3s &#xff08;2&#xff09;取消勾选循环&#xff08;Looping&#xff09; &#xff08;2&#xff09;修改粒子存在时间&…

面试常考题---128陷阱(详细)

1.问题引入 分别引入了int和Integer变量&#xff0c;并进行比较 int b 128; int b1 128;Integer d 127; Integer d1 127;Integer e 128; Integer e1 128;System.out.println(bb1); System.out.println(dd1); System.out.println(ee1); System.out.println(e.equals(e1)…

刷题(day01)

1、leetcode485.最大连续1的个数 给定一个二进制数组 nums &#xff0c; 计算其中最大连续 1 的个数。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,0,1,1,1] 输出&#xff1a;3 解释&#xff1a;开头的两位和最后的三位都是连续 1 &#xff0c;所以最大连续 1 的个数是 3.…