STM32编程Printf函数语法

news2024/11/18 17:54:27

Printf函数语法

函数声明

printf 函数的声明如下:

// C99 前
int printf( const char *format, ... );
// C99 起
int printf( const char *restrict format, ... );

参数列表

format – 是格式控制字符串,包含了两种类型的对象:普通字符和转换说明 。在输出时,普通字符将原样不动地复制到标准输出,转换说明并不直接输出而是用于控制 printf 中参数的转换和打印。每个转换说明都由一个百分号字符(%)开始,以转换说明结束,从而说明输出数据的类型、宽度、精度等 。
printf 的格式控制字符串 format 中的转换说明组成如下,其中 [] 中的部分是可选的:
%[flags][width][.precision][length]specifier,即:%[标志][最小宽度][.精度][类型长度]说明符 。转换说明详解见下文。
附加参数 – 根据不同的 format 字符串,函数可能需要一系列的附加参数,每个参数包含了一个要被插入的值,替换了 format 参数中指定的每个 % 标签。参数的个数应与 % 标签的个数相同。

功能

printf 函数在输出格式 format 的控制下,将其参数进行格式化,并在标准输出设备(显示器、控制台等)上打印出来。

返回值

如果函数执行成功,则返回所打印的字符总数,如果函数执行失败,则返回一个负数。

函数说明及应用示例编辑

转换说明详解

format 转换说明组成是%[flags][width][.precision][length]specifier ,具体讲解如下:

说明符(specifier)

说明符(specifier)用于规定输出数据的类型,含义如下:
在这里插入图片描述

示例代码:

// 以下程序用于输出各种格式化数据(其中 “\n” 表示换行的转义字符,具体见下文的转义字符说明):

#include <stdio.h>
int main() {
    char ch = 'h';
    int count = -9234;
    double fp = 251.7366;
 
    // 显示整数
    printf( "Integer formats:\n"
            "   Decimal: %d  Unsigned: %u\n", count, count);
    printf( "Decimal %d as:\n   Hex: %Xh  "
            "C hex: 0x%x  Octal: %o\n", count, count, count, count );
    // 显示字符
    printf("Characters in field:\n"
          "%10c\n", ch);
    // 显示实数
    printf("Real numbers:\n   %f %.2f %e %E\n", fp, fp, fp, fp );
 
    return 0;
}
  
//程序运行结果:
Integer formats:
   Decimal: -9234  Unsigned: 4294958062
Decimal -9234 as:
   Hex: FFFFDBEEh  C hex: 0xffffdbee  Octal: 37777755756
Characters in field:
         h
Real numbers:
   251.736600 251.74 2.517366e+002 2.517366E+002

flags(标志)

标志(flags)用于规定输出样式,含义如下:
在这里插入图片描述

示例代码:

#include <stdio.h>
#define PAGES 931
int main() {
    const double RENT = 3852.99;  // const-style constant
 
    printf("*%-10d*\n", PAGES);                            //左对齐,右边补空格
    printf("*%+4.2f*\n", RENT);                            //输出正负号
    printf("%x %X %#x\n", 31, 31, 31);                     //输出0x
    printf("**%d**% d**% d**\n", 42, 42, -42);             //正号用空格替代,负号输出
    printf("**%5d**%5.3d**%05d**%05.3d**\n", 6, 6, 6, 6);  //前面补0
 
    return 0;
}
  
//程序运行结果:
*931       *
*+3852.99*
1f 1F 0x1f
**42** 42**-42**
**    6**  006**00006**  006**

width(最小宽度)

最小宽度(width)用于控制显示字段的宽度,取值和含义如下:
在这里插入图片描述
示例代码: [3]

#include <stdio.h>
#define PAGES 931
int main() {
    printf("*%2d*\n", PAGES);         //输出的字段长度大于最小宽度,不会截断输出
    printf("*%10d*\n", PAGES);        //默认右对齐,左边补空格      
    printf("*%*d*\n", 2, PAGES);      //等价于 printf("*%2d*\n",PAGES)
    return 0;
}
  
//程序运行结果:
*931*
*       931*
*931*

.precision(精度)

精度(.precision)用于指定输出精度,取值和含义如下:
在这里插入图片描述

示例代码:

#include <stdio.h>
int main() {
    const double RENT = 3852.99;  // const-style constant
    printf("*%4.2f*\n", RENT);
    printf("*%3.1f*\n", RENT);
    printf("*%10.3f*\n", RENT);
 
    return 0;
}
  
//程序运行结果:
*3852.99*
*3853.0*
*  3852.990*

length(类型长度)

类型长度(length)用于控制待输出数据的数据类型长度,取值和含义如下:
在这里插入图片描述

示例代码:

#include <stdio.h>
#define PAGES 336
int main() {
    short num = PAGES; 
    long n3 = 2000000000;     long n4 = 1234567890; 
     printf("num as short and unsigned short:  %hd %hu\n", num, num);     printf("%ld %ld\n", n3, n4);
 
    return 0;
}
  
//程序运行结果:
num as short and unsigned short:  336 336 2000000000 1234567890

转义序列

转义序列在字符串中会被自动转换为相应的特殊字符。printf() 使用的常见转义字符如下:
在这里插入图片描述

示例代码: [2]

#include <stdio.h>
int main(void) {
    printf("This\nis\na\ntest\n\nShe said, \"How are you?\"\n");
    return 0;
}
 
//程序运行结果:
This
is
a
test
 
She said, "How are you?"

注意事项编辑

函数返回值

printf 函数的返回值为其输出字符串常量的字符数(注意字符数与字数的区别),注意计数针对所有的打印字符,包括空格和不可见的换行字符(不包括字符串的空字符)。

打印较长字符串

有时printf 语句会很长,以至于不能在一行被放下,如果我们必须分割一个字符串,有以下三种方式可以选择。需要注意的是,我们可以在字符串中使用 “\n” 换行符来表示换行字符,但是在字符串中不能通过回车键来产生实际的换行字符。

示例代码:

#include <stdio.h>
int main() {
    //方式一:使用多个printf语句
    printf("Here's one way to print a ");
    printf("long string.\n");
      
    //方式二:使用反斜杠 "\" 加回车的组合来进行分割,注意下一行要从最左侧开始,否则缩进会成为该字符串的一部分
    printf("Here's another way to print a \
long string.\n");
      
    //方式三:采用字符串连接的方法,中间不能有逗号,可以是空格或者回车
    printf("Here's the newest way to print a "
          "long string.\n");      /* ANSI C */
      
    return 0;
}
 
//程序运行结果:
Here's one way to print a long string.
Here's another way to print a long string.
Here's the newest way to print a long string.

参考原文:《百度百科-printf格式化输出函数》

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

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

相关文章

C语言小白急救 指针初级讲解(四千字教程)

系列文章目录 C语言小白急救 表达式求值&#xff08;两千字教程&#xff09; C语言小白急救 操作符详解(8千字保姆级教程) C语言小白急救 扫雷游戏&#xff08;万字保姆级教程&#xff09; C语言小白急救 使用C语言编写‘三子棋‘ 文章目录 系列文章目录[C语言小白急救 表达式…

YOLOv5、YOLOv8改进:SOCA注意力机制

目录 简介 2.YOLOv5使用SOCA注意力机制 2.1增加以下SOCA.yaml文件 2.2common.py配置 2.3yolo.py配置 简介 注意力机制&#xff08;Attention Mechanism&#xff09;源于对人类视觉的研究。在认知科学中&#xff0c;由于信息处理的瓶颈&#xff0c;人类会选择性地关注所有…

五款拿来就能用的炫酷表白代码

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;小白零基础《Python入门到精通》 五款炫酷表白代码 1、无限弹窗表白2、做我女朋友好吗&#xff0c;不同意就关机3、…

增长黑武器|LTD营销SaaS荣获“2023亚太杰出营销数字化供应商”

LTD受邀与全球五百强企业数字化创新决策人&#xff0c;共同交流探讨信息化管理与数字化变革。 盛夏未央&#xff0c;八月笙箫已起&#xff0c;初秋登场。 在这烂漫的金秋时节&#xff0c;杭州乐通达网络有限公司&#xff08;简称&#xff1a;LTD&#xff09;受邀参加了“重建信…

【VS Code插件开发】Webview面板(三)

&#x1f431; 个人主页&#xff1a;不叫猫先生&#xff0c;公众号&#xff1a;前端舵手 &#x1f64b;‍♂️ 作者简介&#xff1a;前端领域优质作者、阿里云专家博主&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &#x1f4e2; 资料领取&#xff1a;前端…

嵌入式设备应用开发(其他第三方库)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 前面我们介绍的qt、boost这些都是通用库。也就是说,不管什么样的场景,这些库都可以拿过来使用。然而在实际开发中还有一些第三方库,它是需要和实际场景联系在一起的。也就是说,…

百度千帆大模型初体验,接入30+大模型、100+提示词模版、插件最丰富,国内最强

大家好&#xff0c;我是二哥呀。 作为国内的头部大厂&#xff0c;百度在大模型这块的投入力度可以说非常大&#xff0c;3 月 16 号发布的大模型——文心一言可以说在业界激起了巨浪。 有支持的&#xff0c;当然也有怀疑的&#xff0c;但无论如何&#xff0c;百度勇敢的迈出去…

致敬,“编辑器之神”Vim的开发者Bram Moolenaar去世

编辑器之神Vim之父Bram Moolenaar逝世&#xff0c;享年62岁。其家人称&#xff0c;因过去几周里病情迅速恶化&#xff0c;Bram Moolenaar于8月3日去世。Bram的一生将大部分时间都奉献给了Vim&#xff0c;甚至在一个月前&#xff0c;他还在对Vim做着更新、修改工作。 Vim 是一个…

数据在内存中的储存·大小端(文字+画图详解)(c语言·超详细入门必看)

前言&#xff1a;Hello&#xff0c;大家好&#xff0c;我是心跳sy&#x1f618;&#xff0c;本节我们介绍c语言的两种基本的内置数据类型&#xff1a;数值类型和字符类型在内存中的储存方法&#xff0c;并对大小端进行详细介绍&#xff08;附两种大小端判断方法&#xff09;&am…

操作系统——进程和线程

文章目录 1.进程和线程的区别2.进程有哪几种状态?3.进程间的通信方式4.线程间的同步的方式5.进程的调度算法 1.进程和线程的区别 从上图可以看出&#xff1a;一个进程中可以有多个线程&#xff0c;多个线程共享进程的堆和方法区 (JDK1.8 之后的元空间)资源&#xff0c;但是每个…

块/ if else/ switch /for for each

1、块作用域&#xff0c; 定义在{}中的变量&#xff0c;只能在{}内生效 import java.util.*; public class Test{ public static void main(String[] xxx){int a10;if(a>9){int k 2;//k只在if{}内有效}//这个括号之后再对k进行操作&#xff0c;违法} } import java.util.…

Java之优雅处理 NullPointerException空指针异常

前言 NPE问题就是&#xff0c;我们在开发中经常碰到的NullPointerException。假设我们有两个类&#xff0c;他们的UML类图如下图所示 在这种情况下&#xff0c;有如下代码 user.getAddress().getProvince(); 这种写法&#xff0c;在user为null时&#xff0c;是有可能报Nul…

AI引擎助力,CamScanner智能高清滤镜开启扫描新纪元!

文章目录 ⭐ 写在前面⭐ 突破图像处理难点&#xff1a;扫描全能王的独特优势⭐ 耳听为虚&#xff0c;眼见为实⭐ 产品背后的主要核心&#xff1a;AI-Scan助力⭐ 深度学习助力智能文档处理的国际化进程⭐ 品味智能文档处理的轻松与精准 ⭐ 写在前面 在数字化快速发展的今天&…

CentOS6上安装MySQL8与Nginx开机自启

背景 临时在一台华为云的 CentOS6 上安装部署一个业务系统&#xff0c;这里记录下 MySQL 8 与 Nginx 的安装过程中遇到的问题。 CentOS6上安装MySQL8 # 下载 wget http://repo.mysql.com/yum/mysql-8.0-community/el/6/x86_64/mysql-community-common-8.0.19-1.el6.x86_64.r…

7-8 二分查找法

分数 10 全屏浏览题目 切换布局 作者 王跃萍 单位 东北石油大学 用二分法在一个有序数列{1,2,3,4,5,6,7,8,9,10}中查找key值&#xff0c;若找到key则输出其在数组中对应的下标&#xff0c;否则输出not found。 输入格式: 直接输入一个要查找的正整数key。没有其它任何附加…

并发-并发挑战及底层实现原理笔记

并发编程挑战 上下文切换 cpu通过给每个线程分配cpu时间片实现多线程执行&#xff0c;时间片是cpu分配给各个线程的时间&#xff0c;cpu通过不断切换线程执行。线程有创建和上下文切换的开销。减少上下文切换的方方法 – 无锁并发编程&#xff0c;eg&#xff1a;将数据的id按…

CSS中如何实现文字溢出省略号(text-overflow: ellipsis)效果?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ CSS中如何实现文字溢出省略号&#xff08;text-overflow: ellipsis&#xff09;效果&#xff1f;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 …

16----公式

本节我们来学习如何在markdown中打印公式 Markdown是一种轻量级标记语言&#xff0c;常用于撰写文档、博客和论坛帖子。虽然Markdown本身并不支持数学公式&#xff0c;但可以使用一些扩展来实现公式的显示。在支持公式扩展的 Markdown 解析器中&#xff0c;我们可以使用 Katex …

【核磁共振成像】临床基本通用脉冲序列

目录 一、脉冲序列二、自旋回波(SE)脉冲序列2.1 自旋回波脉冲序列2.2 信噪比、差噪比2.3 采样2.4 改进的自旋回波变型序列 三、反向恢复(IR)脉冲序列3.1 反向恢复脉冲序列3.2 关于反向恢复脉冲序列的改进 四、梯度回波(GE)脉冲序列4.1 GE序列基本概念4.2 三维成像 五、相干稳态…

【Spring Boot 源码学习】自动装配流程源码解析(下)

自动装配流程源码解析&#xff08;下&#xff09; 引言往期内容主要内容4. 排除指定自动配置组件5. 过滤自动配置组件6. 触发自动配置事件 总结 引言 上篇博文&#xff0c;笔者带大家了解了自动装配流程中有关自动配置加载的流程&#xff1b; 本篇将介绍自动装配流程剩余的内…