【C语言】格式化输出占位符及其标志字符详解(基于ISO/IEC 9899:2024)

news2024/9/20 23:46:28

LuckiBit

目录

  • C语言格式化输出占位符及其标志字符详解(基于ISO/IEC 9899:2024)
    • 1. 格式说明符的基本结构
      • 1.1 标志字符(Flags)
        • 示例代码
      • 1.2 宽度(Width)
        • 示例代码
      • 1.3 精度(Precision)
        • 示例代码
      • 1.4 长度修饰符(Length Modifiers)
        • 示例代码
      • 1.5 类型(Type)
        • 示例代码
    • 2. 详细说明
      • 2.1 标志字符(Flags)
      • 2.2 宽度(Width)
      • 2.3 精度(Precision)
      • 2.4 长度修饰符(Length Modifiers)
      • 2.5 类型字符(Type Characters)
    • 3. 总结
    • 4. 结束语
    • 相关文章:

C语言格式化输出占位符及其标志字符详解(基于ISO/IEC 9899:2024)

在C语言中,格式化输出通过 printf 函数等格式化输出函数来实现。格式说明符(占位符)定义了数据的输出方式,标准ISO/IEC 9899:2024(C23)对这些格式说明符进行了详细规定。本文将详细讲解格式说明符的组成部分,包括标志字符、宽度、精度、长度修饰符和类型字符,并适当增加表格说明。

1. 格式说明符的基本结构

格式说明符用于在格式化字符串中定义数据的输出方式。其基本结构如下:

%[标志][宽度][.精度][长度修饰符]类型

每个部分的含义如下:

  1. 标志字符(Flags)
  2. 宽度(Width)
  3. 精度(Precision)
  4. 长度修饰符(Length Modifiers)
  5. 类型(Type)

1.1 标志字符(Flags)

标志字符用于调整数据的对齐和填充方式。以下是ISO/IEC 9899:2024标准中定义的常见标志字符及其含义:

标志字符含义示例输出
-左对齐printf("左对齐: %-10d\n", num);左对齐: 123
+强制显示符号(正号或负号)printf("显示符号: %+d\n", num);显示符号: +123
如果没有符号,则在结果之前插入空格printf("插入空格: % d\n", num);插入空格: 123
#使用替代格式printf("替代格式: %#x\n", num);替代格式: 0x7b
0用零填充printf("零填充: %010d\n", num);零填充: 0000000123
示例代码
#include <stdio.h>

int main() {
    int num = 123;

    printf("左对齐: %-10d\n", num);        // 输出: 左对齐: 123       
    printf("显示符号: %+d\n", num);        // 输出: 显示符号: +123
    printf("插入空格: % d\n", num);        // 输出: 插入空格:  123
    printf("替代格式: %#x\n", num);        // 输出: 替代格式: 0x7b
    printf("零填充: %010d\n", num);        // 输出: 零填充: 0000000123

    return 0;
}

1.2 宽度(Width)

宽度指定了输出字段的最小宽度。如果输出的数据小于该宽度,则会用空格或零填充(取决于是否使用了 0 标志)。宽度值可以是整数,表示字符数。

宽度示例代码输出
10printf("宽度: %10d\n", num);宽度: 123
示例代码
#include <stdio.h>

int main() {
    int num = 123;
    printf("宽度: %10d\n", num);         // 输出: 宽度:         123
    return 0;
}

1.3 精度(Precision)

精度主要用于浮点数和字符串的格式化。对于浮点数,精度指定小数点后的位数。对于字符串,精度指定输出的最大字符数。

精度示例代码输出
.2fprintf("浮点数精度: %.2f\n", pi);浮点数精度: 3.14
.5sprintf("字符串精度: %.5s\n", str);字符串精度: Hello
示例代码
#include <stdio.h>

int main() {
    float pi = 3.14159;
    char str[] = "Hello, World!";

    printf("浮点数精度: %.2f\n", pi);     // 输出: 浮点数精度: 3.14
    printf("字符串精度: %.5s\n", str);    // 输出: 字符串精度: Hello

    return 0;
}

1.4 长度修饰符(Length Modifiers)

长度修饰符用于指定数据的类型和长度。不同的修饰符可以影响数据的表示方式和存储大小。

长度修饰符类型示例代码输出
hshortprintf("短整数: %hd\n", short_num);短整数: 42
llongprintf("长整数: %ld\n", long_num);长整数: 1234567890
lllong longprintf("长长整数: %lld\n", long_long_num);长长整数: 1234567890123456789
Llong doubleprintf("长双精度浮点数: %Lf\n", long_double_num);长双精度浮点数: 3.141593
示例代码
#include <stdio.h>

int main() {
    short short_num = 42;
    long long_num = 1234567890;
    long long long_long_num = 1234567890123456789LL;
    long double long_double_num = 3.141592653589793238L;

    printf("短整数: %hd\n", short_num);        // 输出: 短整数: 42
    printf("长整数: %ld\n", long_num);         // 输出: 长整数: 1234567890
    printf("长长整数: %lld\n", long_long_num); // 输出: 长长整数: 1234567890123456789
    printf("长双精度浮点数: %Lf\n", long_double_num); // 输出: 长双精度浮点数: 3.141593

    return 0;
}

1.5 类型(Type)

类型字符决定了数据的格式。不同的类型字符适用于不同的数据类型。

类型字符含义示例代码输出
d / i十进制整数printf("十进制整数: %d\n", num);十进制整数: 123
o八进制整数printf("八进制整数: %o\n", num);八进制整数: 173
x / X十六进制整数(小写/大写)printf("十六进制整数: %x\n", num);十六进制整数: 7b
f十进制浮点数printf("浮点数: %f\n", pi);浮点数: 3.141590
e / E科学计数法(小写/大写e)printf("科学计数法: %e\n", pi);科学计数法: 3.141590e+00
g / G最简形式(自动选择%e%fprintf("最简形式: %g\n", pi);最简形式: 3.14159
c单个字符printf("字符: %c\n", ch);字符: A
s字符串printf("字符串: %s\n", str);字符串: Hello, World!
示例代码
#include <stdio.h>

int main() {
    int num = 123;
    float pi = 3.14159;
    char ch = 'A';
    char str[] = "Hello, World!";

    // 整数类型
    printf("十进制整数: %d\n", num);          // 输出: 十进制整数: 123
    printf("八进制整数: %o\n", num);          // 输出: 八进制整数: 173
    printf("十六进制整数: %x\n", num);        // 输出: 十六进制整数: 7b
    printf("十六进制整数(大写): %X\n", num); // 输出: 十六进制整数(大写): 7B

    // 浮点类型
    printf("浮点数: %f\n", pi);              // 输出: 浮点数: 3.141590
    printf("科学计数法: %e\n", pi);          // 输出: 科学计数法: 3.141590e+00
    printf("最简形式: %g\n", pi);            // 输出: 最简形式: 3.14159

    // 字符和字符串
    printf("字符: %c\n", ch);               // 输出: 字符: A
    printf("字符串: %s\n", str);            // 输出: 字符串: Hello, World!

    // 标志字符示例
    printf("左对齐: %-10d\n", num);         // 输出: 左对齐: 123       
    printf("显示符号: %+d\n", num);         // 输出: 显示符号: +123
    printf("插入空格: % d\n", num);         // 输出: 插入空格:  123
    printf("替代格式: %#x\n", num);         // 输出: 替代格式: 0x7b
    printf("零填充: %010d\n", num);         // 输出: 零填充: 0000000123

    // 宽度和精度示例
    printf("宽度: %10d\n", num);            // 输出: 宽度:         123
    printf("浮点数精度: %.2f\n", pi);       // 输出: 浮点数精度: 3.14
    printf("字符串精度: %.5s\n", str);      // 输出: 字符串精度: Hello

    // 长度修饰符示例
    short short_num = 42;
    long long_num = 1234567890;
    long long long_long_num = 1234567890123456789LL;
    long double long_double_num = 3.141592653589793238L;

    printf("短整数: %hd\n", short_num);        // 输出: 短整数: 42
    printf("长整数: %ld\n", long_num);         // 输出: 长整数: 1234567890
    printf("长长整数: %lld\n", long_long_num); // 输出: 长长整数: 1234567890123456789
    printf("长双精度浮点数: %Lf\n", long_double_num); // 输出: 长双精度浮点数: 3.141593

    return 0;
}

2. 详细说明

2.1 标志字符(Flags)

标志字符用于调整输出格式的对齐和填充方式。详细说明如下:

  • -(左对齐): 在字段宽度内,将数据左对齐,右侧填充空格或零。
  • +(显示符号): 强制输出符号,无论是正号(+)还是负号(-)。
  • (插入空格): 如果数据为正数,插入一个空格以对齐负数的输出。
  • #(替代格式): 对于整数,使用 0x0 前缀;对于浮点数,强制显示小数点。
  • 0(零填充): 用零填充字段的空白区域。
标志字符含义示例输出
-左对齐printf("左对齐: %-10d\n", num);左对齐: 123
+强制显示符号(正号或负号)printf("显示符号: %+d\n", num);显示符号: +123
如果没有符号,则在结果之前插入空格printf("插入空格: % d\n", num);插入空格: 123
#使用替代格式printf("替代格式: %#x\n", num);替代格式: 0x7b
0用零填充printf("零填充: %010d\n", num);零填充: 0000000123

2.2 宽度(Width)

宽度指定了输出字段的最小宽度。如果数据长度小于指定宽度,则使用空格填充。宽度为非负整数。

宽度示例代码输出
10printf("宽度: %10d\n", num);宽度: 123

2.3 精度(Precision)

精度控制浮点数的小数位数和字符串的最大字符数。浮点数的精度值表示小数点后的位数,字符串的精度值表示最大字符数。

精度示例代码输出
.2fprintf("浮点数精度: %.2f\n", pi);浮点数精度: 3.14
.5sprintf("字符串精度: %.5s\n", str);字符串精度: Hello

2.4 长度修饰符(Length Modifiers)

长度修饰符用于指定数据的类型和长度,影响数据的存储和显示方式。以下是常用长度修饰符:

长度修饰符类型示例代码输出
hshortprintf("短整数: %hd\n", short_num);短整数: 42
llongprintf("长整数: %ld\n", long_num);长整数: 1234567890
lllong longprintf("长长整数: %lld\n", long_long_num);长长整数: 1234567890123456789
Llong doubleprintf("长双精度浮点数: %Lf\n", long_double_num);长双精度浮点数: 3.141593

2.5 类型字符(Type Characters)

类型字符决定了数据的格式类型:

类型字符含义示例代码输出
d / i十进制整数printf("十进制整数: %d\n", num);十进制整数: 123
o八进制整数printf("八进制整数: %o\n", num);八进制整数: 173
x / X十六进制整数(小写/大写)printf("十六进制整数: %x\n", num);十六进制整数: 7b
f十进制浮点数printf("浮点数: %f\n", pi);浮点数: 3.141590
e / E科学计数法(小写/大写e)printf("科学计数法: %e\n", pi);科学计数法: 3.141590e+00
g / G最简形式(自动选择%e%fprintf("最简形式: %g\n", pi);最简形式: 3.14159
c单个字符printf("字符: %c\n", ch);字符: A
s字符串printf("字符串: %s\n", str);字符串: Hello, World!

3. 总结

ISO/IEC 9899:2024标准定义了C语言格式化输出的详细规则,包括标志字符、宽度、精度、长度修饰符和类型字符。通过理解这些格式说明符,开发者可以精确控制输出格式,确保程序输出的准确性和可读性。

理解并正确使用这些占位符和标志字符,可以帮助我们在C语言中实现更灵活和精确的输出操作,提高代码的可维护性和用户的体验。

4. 结束语

  1. 本节内容已经全部介绍完毕,希望通过这篇文章,大家对C语言格式化输出有了更深入的理解和认识。
  2. 感谢各位的阅读和支持,如果觉得这篇文章对你有帮助,请不要吝惜你的点赞和评论,这对我们非常重要。再次感谢大家的关注和支持!点我关注❤️

相关文章:

  • 指针的神秘探险:从入门到精通的奇幻之旅 !

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

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

相关文章

一键换肤(Echarts 自定义主题)

一键换肤&#xff08;Echarts 自定义主题&#xff09; 一、使用官方主题配置工具 官方主题配置工具&#xff1a;https://echarts.apache.org/zh/theme-builder.html 如果以上主题不满足使用&#xff0c;可以自己自定义主题 例如&#xff1a;修改背景、标题等&#xff0c;可…

字节跳动飞书一面0715

进程间通信方式有哪些 1、管道通信&#xff0c;分为匿名管道和有名管道&#xff0c;匿名管道只能在有亲缘关系如父子进程间使用。有名管道可以允许无亲缘关系进程间的通信。它们都是半双工的通信方式&#xff0c;数据只能单向流动。 2、消息队列&#xff0c;用内核中的链表实现…

深入理解WAF(Web应用防火墙)及其安全防御策略

随着互联网的普及和发展&#xff0c;Web应用也面临着越来越多的安全威胁&#xff0c;如SQL注入、跨站脚本&#xff08;XSS&#xff09;、跨站请求伪造&#xff08;CSRF&#xff09;等。这些威胁不仅可能造成数据泄露&#xff0c;还可能导致业务中断和品牌受损。本文将以快快网络…

JavaEE 第9节 阻塞队列详解

一、概念 阻塞队列是在普通队列&#xff08;先进先出的数据结构&#xff09;的基础上增加了阻塞属性的特殊队列 1&#xff09;当阻塞队列空的时候&#xff0c;如果继续出队元素会进入阻塞状态&#xff0c;直到其他线程入队元素。 2&#xff09;当阻塞队列满的时候&#xff0c;…

瑞萨电子并购Altium 引领行业创新与发展

公开资料显示&#xff0c;2023 年 6 月&#xff0c;瑞萨电子曾宣布在 Altium 的 Altium 365 云平台上实现了所有 PCB 设计的标准化开发。瑞萨电子一直与 Altium 合作&#xff0c;将其所有产品的 ECAD 库发布到 Altium Public Vault。借助 Altium365 上的制造商零件搜索等功能&a…

ROW_NUMBER(), RANK(), DENSE_RANK() SQL排序函数图文详解

ROW_NUMBER(), RANK(), DENSE_RANK() ROW_NUMBER(): 为结果集中的每一行分配唯一的连续编号。即使有重复的值&#xff0c;ROW_NUMBER() 也会为它们分配不同的序号。 SELECT column_name, ROW_NUMBER() OVER (ORDER BY column_name) AS row_num FROM table_name;2. RANK(): 对结…

高可用集群keepalived从部署到实战一篇解决

目录 一.高可用集群 1.1 集群类型 1.2 系统可用性 1.3 系统故障 1.4 实现高可用 1.5.VRRP&#xff1a; 1.5.1 VRRP 相关术语 1.5.2 VRRP 相关技术 二.Keepalived 部署 2.1 keepalived 简介 2.2keepalived架构 2.3 Keepalived 环境准备 2.4 Keepalived 相关文件 2.…

java实现七牛云内容审核功能,文本、图片和视频的内容审核(鉴黄、鉴暴恐、敏感人物)

目录 1、七牛云内容审核介绍 2、查看内容审核官方文档 2.1、文本内容审核 2.1.1、文本内容审核的请求示例 2.1.2、文本内容审核的返回示例 2.2、图片内容审核 2.2.1、请求参数 2.2.2、返回参数 2.3、视频内容审核 3、代码实现 3.1、前期代码准备 3.2、文本内容审核…

基于Spring + Vue的旅游景区项目+源代码+文档说明

文章目录 源代码下载地址项目介绍项目功能界面预览 项目备注源代码下载地址 源代码下载地址 点击这里下载源码 项目介绍 基于Spring Vue的旅游景区项目 项目功能 民宿管理员&#xff1a;订单数量统计&#xff0c;订单交易额统计&#xff0c;客房统计饼图&#xff0c;酒店…

【STM32嵌入式系统设计与开发拓展】——14_定时器之输入捕获

参考哔站&#xff1a;链接: 铁头山羊 一、微控制器的高级定时与控制功能集合 1、时基单元 2、输入捕获 3、输出比较 4、从模式控制器 5、高级定时器的输出控制 二、问题集合 1、什么是定时器 定时器是一种专门负责定时功能的片上外设GPI0AFI0EXTIUSART RCC I2C) 2、定时器…

飞越现实:3D可视化引领飞行体验新纪元

在浩瀚的蓝天之下&#xff0c;飞机以优雅的姿态划破长空&#xff0c;每一次起降、每一次盘旋&#xff0c;都是对速度与科技的完美诠释。而今&#xff0c;随着科技的飞速发展&#xff0c;我们不再仅仅满足于仰望天际的壮丽景象&#xff0c;而是能够借助先进的3D可视化技术&#…

JavaEE 第10节 线程池(Thread Pool)介绍

目录 一、线程池是什么 二、为什么线程池中取线程会比直接向操作系统申请来的高效&#xff1f; 三、JAVA标准库中的线程池 &#xff08;1&#xff09;类&#xff1a;ThreadPoolExecutor 1、int corePoolSize与int maximumPoolSize 2、long keepAlive和TimeUnit unit 3、Blo…

MySQL第6讲--DQL(数据查询语言)的基本操作之基本和条件查询

文章目录 前言DQL(数据查询语言)基本操作查询操作基本查询示例1&#xff1a;查询表格的name&#xff0c;age&#xff0c;并返回&#xff1b;示例2&#xff1a;查询表格中的所有字段&#xff1b;示例3&#xff1a;查询所有员工的工号并返回&#xff0c;起别名&#xff1b;示例4&…

人工智能在新药研发领域中发挥着至关重要的作用

本综述主要介绍机器学习和深度学习方法在药物发现领域的应用进展以及相关企业。 声明&#xff1a;本文为火石创造原创文章&#xff0c;欢迎个人转发分享&#xff0c;网站、公众号等转载需经授权。 本文选自《药学进展》2021年第7期&#xff0c;作者黄芳 1&#xff0c;杨红飞 1…

武汉流星汇聚:中国卖家亚马逊显威,供应链创新引领全球电商潮

在全球电商的浩瀚星空中&#xff0c;亚马逊无疑是最耀眼的那颗星&#xff0c;其庞大的用户基础、广泛的销售网络以及强大的品牌影响力&#xff0c;为无数商家提供了通往成功的快车道。而在这片充满机遇的蓝海中&#xff0c;中国卖家以其独特的优势&#xff0c;正逐渐成为一股不…

钢铁百科:SA572Gr60应用领域、SA572Gr60热处理状态、SA572Gr60常用规格

一、SA572Gr60材质与执行标准 SA572Gr60钢板是一种美标高强度低合金铌-钒结构钢板&#xff0c;执行标准为ASTM A572/A572M。此外&#xff0c;该钢板也符合ASME标准SA-572/SA-572M。 二、SA572Gr60化学成分 SA572Gr60钢板的主要化学成分包括&#xff1a; 碳C&#xff1a;0.16-…

haproxy高级功能及配置

目录 1.基于cookie的会话保持&#xff1a; 2.HAProxy状态页&#xff1a; 3.IP透传 1.基于cookie的会话保持&#xff1a; cookie value&#xff1a;为当前server指定cookie值&#xff0c;实现基于cookie的会话黏性&#xff0c;相对于基于 source 地址 hash 调度算法对客户端…

msgqueue.hpp队列模块

一.MsgQueue相关类介绍 二.MsgQueue类的实现 成员变量 MsgQueue 结构体用于描述一个消息队列的基本属性。 std::string _name; // 队列名称 bool _durable; // 队列是否持久化 bool _exclusive; // 队列是否独占 bool _auto_del; // 队列是否自动删除 google::pro…

版本控制基础理论

一、本地版本控制 在本地记录文件每次的更新&#xff0c;可以对每个版本做一个快照&#xff0c;或是记录补丁文件&#xff0c;适合个人使用&#xff0c;如RCS. 二、集中式版本控制&#xff08;代表SVN&#xff09; 所有的版本数据都保存在服务器上&#xff0c;协同开发者从…