目录

一、基本用法

二、占位符

基本用法

常用占位符

字符串占位符示例

多占位符示例

注意事项

三、占位符列表

基本数据类型占位符

浮点数占位符

特殊类型占位符

长度修饰符

使用示例

注意事项

四、输出格式

1、限定宽度

基本用法

左对齐输出

浮点数宽度限制

2、强制显示正负号

3、控制小数精度

基本精度控制

结合宽度限制

动态参数指定

4、截断字符串输出

基本用法

特点

结合宽度限定


一、基本用法

        printf() 函数用于将参数文本输出到屏幕。函数名中的"f"代表"format"(格式化),表示该函数可以定制输出文本的格式。

基本语法示例:

#include <stdio.h>
int main() 
{printf("Hello World");return 0;
}

上述代码会在屏幕上输出一行文字"Hello World"。

注意事项:

  1. printf() 不会自动在行尾添加换行符。运行结束后,光标会停留在输出结束的位置,不会自动换行。

  2. 如需换行,可以在输出文本的结尾添加换行符\n:

    #include <stdio.h>
    int main() 
    {printf("Hello World\n");return 0;
    }
  3. 若需要在文本内部换行,同样可以通过插入换行符实现:

    #include <stdio.h>
    int main() 
    {printf("Hello\nWorld\n");/* 等价于 */printf("Hello\n");printf("World\n");return 0;
    }

重要说明:

  • printf() 函数定义在标准库头文件stdio.h中

  • 使用该函数前,必须在源文件头部引入此头文件


二、占位符

printf() 函数支持在输出文本中使用占位符,这些占位符可以在运行时被具体的值替换。

基本用法

#include <stdio.h>
int main()
{printf("There are %d apples\n", 3);return 0;
}

说明:

  • There are %d apples\n 是输出文本,其中 %d 是占位符。

  • 占位符以百分号 % 开头,后跟一个类型标识符(如 d 表示整数)。

  • printf() 的第二个参数 3 会替换 %d,最终输出:There are 3 apples

常用占位符

占位符类型示例
%d整数printf("%d", 10)
%s字符串printf("%s", "abc")
%f浮点数printf("%f", 3.14)
%c单个字符printf("%c", 'A')

字符串占位符示例

#include <stdio.h>
int main()
{printf("%s will come tonight\n", "zhangsan");return 0;
}

输出:zhangsan will come tonight

多占位符示例

#include <stdio.h>
int main()
{printf("%s says it is %d o'clock\n", "lisi", 21);return 0;
}

说明:

  • 第一个 %s 被 "lisi" 替换

  • 第二个 %d 被 21 替换
    输出:lisi says it is 21 o'clock

注意事项

  1. 参数匹配规则

    • 占位符数量必须与后续参数数量严格匹配

    • 如果有 n 个占位符,printf() 需要 n + 1 个参数(包括格式字符串本身)。

  2. 错误示例:此类错误可能导致未定义行为(输出乱码或程序崩溃)。

    printf("%d %s", 10);  // 错误:缺少第二个参数

三、占位符列表

printf() 提供多种占位符,对应不同的 C 语言数据类型。以下是常用占位符的完整参考:

基本数据类型占位符

占位符类型说明示例
%dint十进制整数printf("%d", 10)
%iint%dprintf("%i", 10)
%uunsigned int无符号十进制整数printf("%u", 10U)
%oint八进制整数printf("%o", 10)
%xint十六进制整数(小写)printf("%x", 255) → ff
%Xint十六进制整数(大写)printf("%X", 255) → FF

浮点数占位符

占位符类型说明
%ffloat/double十进制浮点数
%efloat/double科学计数法(小写e)
%Efloat/double科学计数法(大写E)
%gfloat/double自动选择%f%e(更简洁)
%Gfloat/double自动选择%f%E
%afloat/double十六进制浮点数(小写)
%Afloat/double十六进制浮点数(大写)

特殊类型占位符

占位符类型说明
%cchar单个字符
%schar*字符串
%pvoid*指针地址
%nint*不打印,存储已输出的字符数
%%-输出百分号字符

长度修饰符

可与基本占位符组合使用:

  • hshort(如%hd

  • llong(如%ld

  • lllong long(如%lld

  • Llong double(如%Lf

  • zsize_t(如%zd

使用示例

#include <stdio.h>int main() 
{// 基本整数printf("Decimal: %d\n", 255);        // 255printf("Octal: %o\n", 255);          // 377printf("Hex: %x\n", 255);            // ff// 浮点数printf("Float: %f\n", 3.14159);      // 3.141590printf("Scientific: %e\n", 3.14159); // 3.141590e+00// 特殊类型printf("Character: %c\n", 'A');      // Aprintf("String: %s\n", "Hello");     // Helloprintf("Pointer: %p\n", main);       return 0;
}

注意事项

  1. 类型必须严格匹配占位符

  2. 使用%n时要格外小心(可能引发安全问题)

  3. %%用于输出百分号字符本身


四、输出格式

printf() 可以定制占位符的输出格式。

1、限定宽度

printf() 函数允许通过格式说明符限定输出的最小宽度。具体用法如下:

基本用法

在占位符中指定最小宽度,当输出内容不足该宽度时,默认会在左侧填充空格(右对齐)。

示例:

#include <stdio.h>
int main() 
{printf("%5d\n", 123);  // 输出为 "  123"(前面有2个空格)return 0;
}

说明:

  • %5d 表示该整数的输出宽度至少为5个字符

  • 由于"123"只有3位,不足部分会在前面补2个空格

左对齐输出

在宽度指示符前添加-号可以改为左对齐(右侧补空格)。

示例:

#include <stdio.h>
int main() 
{printf("%-5d\n", 123);  // 输出为 "123  "(后面有2个空格)return 0;
}

浮点数宽度限制

对于浮点数,宽度限制会作用于整个数字(包括整数部分、小数点和小数部分)。

示例:

#include <stdio.h>
int main() 
{printf("%12f\n", 123.45);  // 输出为 "  123.450000"return 0;
}

说明:

  • %12f 表示浮点数至少占用12个字符宽度

  • 默认情况下,printf()会输出6位小数,因此实际输出为"123.450000"(共10个字符)

  • 不足12位,所以在前面补2个空格

注意:当实际数值的宽度超过指定的最小宽度时,会按照实际宽度输出,不会截断数据。

2、强制显示正负号

        默认情况下,printf() 仅在输出负数时显示 - 号。若需强制显示正数的 + 号,可在占位符的 % 后添加 + 标志。

示例:

#include <stdio.h>
int main() 
{printf("%+d\n", 12);   // 输出 "+12"printf("%+d\n", -12);  // 输出 "-12"return 0;
}

说明:

  • %+d 格式确保数值始终带有符号标识

  • 适用于需要明确区分正负值的场景

3、控制小数精度

基本精度控制

通过 %.nf 格式可指定小数位数(n 为要保留的位数):

#include <stdio.h>
int main() 
{printf("Number is %.2f\n", 0.5);  // 输出 "Number is 0.50"return 0;
}

注意:

  • 会自动进行四舍五入

  • 不足位数补零(如 %.3f 输出 "0.500")

结合宽度限制

可同时指定宽度和精度(格式:%宽度.精度f):

#include <stdio.h>
int main() 
{printf("%6.2f\n", 0.5);  // 输出 "  0.50"(头部2空格)return 0;
}

说明:

  • %6.2f 表示总宽度6字符,含2位小数

  • 默认右对齐,不足宽度左侧补空格

动态参数指定

使用 * 占位符可通过参数动态设置宽度和精度:

#include <stdio.h>
int main() 
{printf("%*.*f\n", 6, 2, 0.5);  // 等效于 printf("%6.2f\n", 0.5)return 0;
}

特点:

  • 第一个 * 对应宽度参数(示例中的6)

  • 第二个 * 对应精度参数(示例中的2)

  • 提高代码灵活性,适合需要运行时确定格式的场景

4、截断字符串输出

    printf() 函数可以通过 %.ns 格式说明符来控制字符串的输出长度,其中 n 指定要显示的最大字符数。

基本用法

#include <stdio.h>
int main() 
{printf("%.5s\n", "hello world");  // 输出 "hello"return 0;
}

说明:

  • %.5s 表示只输出字符串的前5个字符

  • 原字符串 "hello world" 被截断为 "hello"

  • 不会修改原字符串,仅控制输出内容

特点

  1. 安全截断:不会导致缓冲区溢出

  2. 精确控制:可指定任意截取长度(不超过字符串实际长度)

  3. 格式灵活:可与最小宽度结合使用(如 %10.5s

结合宽度限定

#include <stdio.h>
int main() 
{printf("%10.5s\n", "hello world");  // 输出 "     hello"(右对齐)printf("%-10.5s\n", "hello world"); // 输出 "hello     "(左对齐)return 0;
}

注意:

  • 当截取长度超过字符串实际长度时,按实际字符串长度输出

  • 常用于格式化表格输出或固定长度显示场景

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

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

相关文章

AI小智单片机esps32-s3烧录教程

1. 下载代码到本地 代码地址&#xff1a;https://github.com/78/xiaozhi-esp32 2. vscode安装环境 安装一下这个插件 3. esp32-s3通过数据线连接电脑 【图片】 4. vscode选择对应配置 如果是用自己的服务还得改下地址 5. 点击构建 6. 点击烧录

socket编程中系统调用send()详细讲解

在 socket 编程中&#xff0c;send() 是用于在已连接的套接字上发送数据的系统调用&#xff0c;主要用于 TCP 协议&#xff08;也可用于 UDP&#xff0c;但需配合连接操作&#xff09;。它负责将用户态的数据传递到内核缓冲区&#xff0c;再由内核协议栈&#xff08;如 TCP/IP&…

Eclipse JSP/Servlet:深入解析与最佳实践

Eclipse JSP/Servlet:深入解析与最佳实践 引言 Eclipse JSP/Servlet 是 Java 企业版(Java EE)的核心技术之一,它为 Web 开发者提供了一个强大的平台来构建动态和交互式的 Web 应用程序。本文将深入探讨 Eclipse JSP/Servlet 的概念、工作原理以及最佳实践,帮助开发者更好…

CNB私有化部署Dify(零成本)教程

本篇文章介绍一下如何进行dify的私有化部署的过程&#xff1a;dify定位是开源的LLM应用平台&#xff0c;搭建自己的这个AI应用&#xff0c;而我们非常熟悉的这个coze实际上是通过搭积木一样搭建AI应用&#xff0c;我选择从dify开始进行了解学习 1.前置准备 我们需要有这个腾讯云…

imx6ull-驱动开发篇16——信号量与互斥体

目录 前言 信号量 概念与特性 信号量 API 函数 互斥体 概念与特性 互斥体 API 函数 前言 Linux 内核提供的几种并发和竞争的处理方法&#xff0c;我们学习了&#xff1a; 驱动开发篇14——原子操作 驱动开发篇15——linux自旋锁 本讲我们就继续学习&#xff1a;信号…

Bug 记录:SecureRandom.getInstanceStrong()导致验证码获取阻塞

问题描述&#xff1a; 在发送验证码到邮件中&#xff0c;接口调用时卡在生成验证码阶段&#xff0c;导致验证码功能完全不可用&#xff1b; 经排查开发环境一切正常&#xff0c;测试环境会重现此问题&#xff1b;问题分析&#xff1a; 现象&#xff1a; 代码卡在 SecureRandom.…

商派小程序商城(小程序/官网/APP···)的范式跃迁与增长再想象

2025年&#xff0c;品牌官方商城应该如何定义&#xff1f;—— 还是一套“电商货架”&#xff1f;在商派看来&#xff0c;现如今“品牌官方商城”则需要重新定义&#xff0c;结合不同品牌企业的业务发展需求&#xff0c;也就有着更多丰富的定义和组合想象——如&#xff0c;商城…

基于串口实现可扩展的硬件函数 RPC 框架(附完整 Verilog 源码)

本文介绍如何使用简单的串口协议搭建一个支持寄存器读写与硬件函数调用的通用交互框架&#xff0c;适用于 FPGA 调试、嵌入式接口、中小型控制系统等场合。 特性&#xff1a; 轻量协议、30 个32位寄存器、函数调用、状态反馈&#xff0c;源码清晰易扩展。&#x1f4a1; 背景与目…

jenkins-飞书通知机制

一. 目标&#xff1a; 触发构建和结束后&#xff0c;自动触发到飞书工作群&#xff0c;发布同学只需要关注消息即可&#xff0c;而无需人工盯梢。 二. 实现方式&#xff1a; 1. 机器人配置&#xff1a; 创建一个群&#xff0c; 配置机器人&#xff1a; 保管好下面的webhoo…

GoLand 项目从 0 到 1:第五天 —— 角色权限中间件实现与事务控制

第五天核心任务:权限校验链路闭环 第五天的开发聚焦于权限控制的核心实现,完成了角色权限中间件的开发,实现了接口级别的权限校验,并基于事务控制确保用户权限操作的数据一致性。通过这部分工作,系统的权限管理从设计阶段正式进入可运行阶段,为后续业务模块的安全接入提…

【工具变量】地级市固定资产投资数据(2000-2023年)

数据简介&#xff1a;地级市固定资产投资是衡量地方经济发展活力与动能的重要指标&#xff0c;其规模、结构及增速不仅反映区域产业布局和政策导向&#xff0c;也直接影响基础设施完善、产业升级和民生改善。清晰展现长期经济发展脉络&#xff0c;助力捕捉经济增长与波动规律。…

Kotlin初体验

前言&#xff1a; 在当今的软件开发领域&#xff0c;随着技术的不断发展&#xff0c;开发者总是在寻找更高效、更简洁的编程语言来提升开发效率并减少代码中的潜在问题。而 Kotlin&#xff0c;作为一门现代的编程语言&#xff0c;逐渐赢得了越来越多开发者的青睐&#xff0c;尤…

五十五、【Linux系统nginx服务】nginx安装、用户认证、https实现

一、Nginx 核心功能全景图 #mermaid-svg-j5M1WUQFrtyrWjAD {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-j5M1WUQFrtyrWjAD .error-icon{fill:#552222;}#mermaid-svg-j5M1WUQFrtyrWjAD .error-text{fill:#552222;s…

AtCoder Beginner Contest 418

文章目录A Im a teapotB Youre a teapotC FlushD XNOR OperationE TrapeziumF Were teapotsG Binary OperationAtCoder Beginner Contest 418A I’m a teapot Takahashi is a teapot. Since he is a teapot, he will gladly accept tea, but will refuse any other liquid. Det…

多级缓存详解

多级缓存 传统缓存&#xff1a; 传统缓存策略一般是请求到达Tomcat后&#xff0c;先查询Redis&#xff0c;如果未命中则查询数据库。 这种模式下请求一定要经过Tomcat处理&#xff0c;Tomcat的性能就成为了整个系统的瓶颈&#xff1b;并且Redis的缓存也有过期时间&#xff0c;一…

接口自动化-JSON Schema

目录 1.介绍 2.安装 3.使用 3.1type关键字 3.2最大值最小值 3.2.1minimum 、 maximum 3.2.2 exclusiveMinimum 、exclusiveMaximum 3.3字符串特殊校验 3.4数据约束 3.5对象约束 3.6必须属性 3.7依赖关系 4.总结 1.介绍 JSON Schema 是一个用来定义和校验 JSON 的…

前端技术架构设计文档(Vue2+Antd+Sass)

前端技术架构设计文档&#xff08;Vue2AntdSass&#xff09; 文档信息项目名称前端系统&#xff08;基于 Vue2 技术栈&#xff09;技术栈核心Vue2 Ant Design Vue Sass版本号V1.0.0技术栈核心Vue2 Ant Design Vue Sass编制日期2025-08-071. 技术栈选型 1.1 核心技术框架类别…

【设计模式】抽象工厂模式 (工具(Kit)模式)

抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;详解一、抽象工厂模式简介 抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09; 是一种 创建型设计模式&#xff08;对象创建型模式&#xff09;&#xff0c;它提供了一种创建一系列相关或相互依赖对象…

Android初学者系统开发学习路线参考

Android初学者系统开发学习路线参考 文章目录Android初学者系统开发学习路线参考一、前言二、Android初学的学习计划第一阶段&#xff08;一个月&#xff09;UI相关学习&#xff1a;开发环境与 UI 基础&#xff0c;第一周&#xff1a;UI 控件与布局进阶&#xff0c;第二周&…

扩散LLM推理新范式:打破生成长度限制,实现动态自适应调节

随着 Gemini-Diffusion&#xff0c;Seed-Diffusion 等扩散大语言模型&#xff08;DLLM&#xff09;的发布&#xff0c;这一领域成为了工业界和学术界的热门方向。但是&#xff0c;当前 DLLM 存在着在推理时必须采用预设固定长度的限制&#xff0c;对于不同任务都需要专门调整才…