C语言之printf浅析

C语言中的可变参数函数的浅析(以Arm 程序中的printf()函数实现为例) . 我们在C语言编程中会遇到一些参数个数可变的函数,一般人对它的实现不理解。例如Printf():   Printf()函数是C语言中非常常用的一个典型的变参数函数,它 的原型为: int printf( const char* format, ...); 它除了一个参数format固定外,后面的参数的个数和类型是不确定的,如下列三种调用方法: 1.    printf(“%d\n”, i); 阅读详情

1.基本用法

        printf  ()是在标准库的头文件stdio.h定义的。使用这个函数之前,必须在源码文件头部引入这个头文件。

        printf()的作用是将参数文本输出到屏幕。它名字里面的 f 代表 format(格式化),表示可以定制输出文本的格式。       

        printf()参数与占位符是一一对应关系,如果有n个占位符,printf()的参数就应该有n+1个,因为格式串算一个参数。如果参数个数少于对应的占位符,printf()可能会输出内存中的任意值。

         printf() 函数的调用格式为:

printf("格式串", 表达式);

         格式串包含普通字符和转换说明,其中转换说明以字符%开头。转换说明是用来表示打印过程中待填充的占位符。如:

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

        pritntf() 不会在行尾自动添加换行符,光标停留在输出结束的地方,不会自动换行。

为了让光标移动到下一行的开头,可以在输出文本的结尾,添加一个换行符\n。

#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 ,还有%s 表示代入的字符串。

#include<stdio.h>
int main()
{
	printf("%s will come\n", "zhang san");//字符串用""引起来
	return 0;
}

        上述示例中,%s 表示代入的是一个字符串,所以printf()的第二个参数就必须是字符串,这个例子是zhang san。执行后输出  zhang san will come

        输出文本里面可以使用多个占位符

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

上面示例中,输出文本有两个占位符,第一个是字符串占位符,第二个是整数占位符,分别对应printf()的第二个参数(lisa)和第三个参数(21)。执行后输出lisa says it is 21 

2. 占位符列举

        printf()的占位符有许多种类,与C语言的数据类型相对应。下⾯按照字母顺序,列出常用的占位符。

• %a :⼗六进制浮点数,字⺟输出为⼩写。
• %A :⼗六进制浮点数,字⺟输出为⼤写。
• %c :字符。
• %d :⼗进制整数。
• %e :使⽤科学计数法的浮点数,指数部分的 e 为⼩写。
• %E :使⽤科学计数法的浮点数,指数部分的 E 为⼤写。
• %i :整数,基本等同于 %d 。
• %f :⼩数,float 类型。

• %lf :  小数,double 类型。

• %g :6个有效数字的浮点数。整数部分⼀旦超过6位,就会⾃动转为科学计数法,指数部分的 e为⼩写。
• %G :等同于 %g ,唯⼀的区别是指数部分的 E 为⼤写。
• %hd :⼗进制short int类型。
• %ho :⼋进制 short int 类型。
• %hx :⼗六进制 short int 类型。
• %hu :unsigned short int 类型。 
• %ld :⼗进制 long int 类型。
• %lo :⼋进制 long int 类型。
• %lx :⼗六进制 long int 类型。
• %lu :unsigned long int 类型。
• %lld :⼗进制 long long int 类型。
• %llo :⼋进制 long long int 类型。
• %llx :⼗六进制 long long int类型。
• %llu :unsigned long long int类型。
• %Le :科学计数法表⽰的 long  double 类型浮点数。
• %Lf :long double 类型浮点数。
• %n :已输出的字符串数量。该占位符本⾝不输出,只将值存储在指定变量之中。
• %o :⼋进制整数。
• %p :指针。
• %s :字符串。
• %u :⽆符号整数(unsigned int)。
• %x :⼗六进制整数。
• %zd : size_t 类型。
• %% :输出⼀个百分号。

小结常见的占位符

  1. int类型:
  •  整数的10进值形式打印:%d
  •  整数的8进值形式打印:%o
  •  整数的16进值形式打印:%x

     2.short int类型:

  •  整数的10进值形式打印:%d
  •  整数的8进值形式打印:%ho
  •  整数的16进值形式打印:%hx

     3.long int类型:

  •  整数的10进值形式打印:%ld
  •  整数的8进值形式打印:%lo
  •  整数的16进值形式打印:%lx

    4. %c ——字符

    5.%s——字符串

    6.%f——float类型

    7. %lf——double类型

    8.%Lf——long double类型

    9. %p——打印地址

3.最小栏宽——限定最小宽度

        printf() 允许限定占位符的最⼩宽度。 

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

上面示例中, %5d 表⽰这个占位符的宽度至少为5位。如果不满5位,对应的值的前面会添加空格。输出的值默认是右对⻬,所以输出内容前面会有空格;如果希望改成左对⻬,即在输出内容后面添加空格,可以在占位符的 % 的后面插⼊⼀个 - 号。

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

上面示例中,输出内容 123 的后面添加了空格。
对于小数,这个限定符会限制所有数字的最小显示宽度。

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

由以上示例可知 ,当输出内容的位数大于或等于最小栏宽时,该内容能完整输出;当输出内容的位数小于最小栏宽的时候,会在所想要的输出内容前或者后添加空格。

4.限度——限定小数位数 

        输出小数时,有时希望限定小数的位数。比如,希望保留小数点后两位,占位符可以写成%.2f 。

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

上面示例中,如果希望小数点后面输出3位(0.500),占位符就要写成%.3f 。

        这种写法可以和限定宽度占位符,结合使用。

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

上面示例中,%6.2f 表示输出的最小宽度为6(小数点也算1位),小数位数是2。所以输出结果的头部有两个空格。

        最小宽度和小数位数这两个限定值,都可以用 * 代替,通过printf()的参数传入。

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

上面示例中, %*.*f 的两个星号通过 printf() 的两个参数 6 和 2 传⼊。

5.输出部分字符串

       %s 占位符⽤来输出字符串,默认是全部输出。如果只想输出开头的部分,可以用 %.[m]s 指定输出的长度,其中 [m] 代表⼀个数字,表示所要输出的长度。

// 输出 hello w
#include <stdio.h>
int main()
{
    printf("%.7s\n", "hello world");//空格也是字符
    return 0;
}

6.输出总显示正负号

        默认情况下, printf() 不对正数显示 + 号,只对负数显示 - 号。如果想让正数也输出 + 号,可
以在占位符的 % 后面加⼀个 + 。

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

上⾯⽰例中, %+d 可以确保输出的数值,总是带有正负号。(菜鸟教程printf:https://www.runoob.com/cprogramming/c-function-printf.html)

欢迎斧正!!!


期待公主,王子的

相关推荐

STM32中RS485方向控制引脚应用详解

深入解析STM32如何通过GPIO控制RS485通讯的方向引脚,实现半双工通信的精准切换。重点讲解硬件连接与软件时序配合,确保rs485通讯稳定可靠,适用于工业控制等实际场景。

weixin_42451850的博客 398

【C语言指南】printf()函数详解

printf 函数在输出格式 format 的控制下,将其参数进行格式化,并在标准输出设备(显示器、控制台等)上打印出来。printf函数是C语言最常用且功能强大的库函数,搞明白printf函数能在工作中做到事半功倍的效果

倔强的石头的博客 3万+

别再只改config了!YOLO/RT-DETR多通道输入实战:数据集结构、多卡训练与参数优先级避坑指南

本文详细解析了YOLO/RT-DETR模型在多通道输入(如8通道多光谱图像)中的实战应用,涵盖数据集结构优化、数据加载器改造、模型参数调优及多卡训练配置。针对常见的多通道输入报错问题,提供了系统的解决方案和性能优化技巧,帮助开发者高效实现非标准数据格式的适配与训练。

weixin_30955617的博客 397

C语言 printf() 详解 非常详细

「来源: |嵌入式大杂烩 ID:zhengnian-2018」来源:优快云 - 恋猫大鲤鱼编译环境:Linux 环境以 g++ 4.4.6 编译成 64 位程序1.printf() 简介printf() 是 C 语言标准库函数,用于将格式化后的字符串输出到标准输出。标准输出,即标准输出文件,对应终端的屏幕。printf() 申明于头文件 stdio.h。函数原型:int printf ( const char * format, ... );返回值:正确返回输出的字符总数,错误返回负值。与此同时,输入输

qq_42109551的博客 4万+

读书笔记|智能运维系统落地方案

对于互联网公司来说,系统复杂化导致的人工运维成本激增已经是普遍现象,采用智能运维是行之有效的应对策略。智能运维的核心思想是利用算法来处理海量运维数据,积累运维经验,从而代替人工思考判断,以自动化的过程实现风险的预防、发现、定位和处理。而智能运维系统是其中的重中之重,但建设企业应用智能运维系统,不是应用运维部独立规划设计就可以完成的,它需要业务、产品、开发、基础设施运维多部门协同才能顺利实施。 那么,作为运维人员,您是否了解智能运维系统的架构?如果参与规划建设智能运维系统,该怎么着手呢?下面我们立足实际需求

xiaoshuaca的博客 681

地瓜派RDK X5部署YOLOv11n避坑指南:手把手教你解决Softmax算子导致的性能暴跌问题

本文详细介绍了在地瓜派RDK X5开发板上部署YOLOv11n模型时遇到的性能问题及解决方案。通过强制BPU部署Softmax算子,成功将推理速度从7FPS提升至47FPS,并提供了完整的优化流程和技术细节,帮助开发者避免类似性能陷阱。

weixin_42629671的博客 268

C语言格式化输出函数printf详解——C语言基础知识

1、printf函数的一般格式 printf函数的一般格式为: printf(格式控制字符串,输出值参数表); 如: printf("f=%f,c=%f\n",f,c); 其中,f=%f,c=%f\n 是格式控制字符串,f,c 是输出值参数表。 (1)格式控制字符串是用双引号括起来的字符串,包括三类信息: 格式字符。格式字符由“%”引导,如%d、%f等。它的作用是控制输出字符的格式。 转义字符。格式控制字符串里的转义字符按照转义后的含义输出,如上面printf函数双引号内的换行符“\n”,即输出回车。

weixin_54194783的博客 9万+

SAP Joule Studio 全景解析

摘要:SAP Joule Studio是SAP Build平台中的低代码/专业级复合工作台,用于构建和管理企业专属的Joule智能体与技能。它支持通过拖拽和声明式编排实现跨系统任务自动化,与SAP及第三方系统集成。核心构件包括Agent(智能体)、Skill(技能)、Action(动作)和Project(项目)。Joule Studio强调企业级落地,与SAP Build Process Automation等工具协同,实现从设计到运行的全生命周期管理。典型应用场景包括供应链补货、财务关账和人力服务台自动化

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 388

【C语言】printf函数详解

printf是库函数,C语言标准库中提供的现成的函数可按照格式来打印信息以上代码均可复制大家可到自己编译器中自行实验当然,若还有什么不懂的地方也可在评论区留言我会一一回复。

小学生ovo- 1650

第五节_PySide6基本窗口控件_主窗口和标签

本文介绍了PySide6中主窗口和标签控件的使用。主要内容包括: 窗口控件分类: QWidget是基础窗口部件,可作为独立窗口或子部件 QMainWindow提供标准应用程序框架,包含菜单栏、工具栏等 QDialog用于对话框,支持模态交互 主窗口创建: 演示了如何创建QMainWindow子类 实现了窗口居中、设置图标、状态栏等功能 提供了窗口几何信息的获取方法 QLabel标签控件: 继承自QFrame类 用于显示文本或图像 文章通过代码示例详细说明了主窗口的创建和使用方法,包括位置控制、图标设置等常见

su桥木的博客 1020

基于AOD-Net与GAN的深度学习去雾算法开发

本文提出一种结合AOD-Net与GAN的深度学习去雾算法。通过改进的AOD-GAN网络架构,集成风格迁移模块,设计包含对抗损失、内容损失和风格损失的复合目标函数。实验表明,该方法在PSNR(24.67)、SSIM(0.92)和FID(32.15)指标上优于传统方法,实现了端到端的物理模型引导图像去雾。未来将优化多尺度特征融合和轻量化部署。

huanghm88的专栏 593

C语言中定义int变量,默认值是多少?Scanf(),Printf()浅析。

闲扯:        小C几年不见的你,突然观望到你高尚的逼格,为毛我的内心依然是崩溃的,下面就让小奴伺候你几下下 (躺好)。。              目录:                 1:C语言中定义int变量,默认值是多少。            2:从代码上解析printf()打印流程。            3:Scanf()浅析。  一:C语

小元点点的博客 2万+

《深入浅出多模态》(四):多模态经典模型CLIP

本文为《深入浅出多模态》系列多模态经典模型CLIP,首先从整体介绍多模态模型发展,对其中经典CLIP模型进行详述,从具体论文、数据集、代码、模型结构、结果等角度分析,本专栏适合从事多模态小白及爱好者学习,欢迎大家关注,如有侵权请联系删除!

专注大数据与人工智能技术分享,欢迎私信加群互相学习! 1045

浅析C语言中printf(),sprintf(),scanf(),sscanf()的用法和区别

printf 语法:  #include int printf( const char *format, ... ); printf()函数根据format(格式)给出的格式打印输出到STDOUT(标准输出)和其它参数中。返回值是输出的字符数量。 sprintf 语法:  #include int sprintf( char *buffer, const char *for

snail866的博客 643

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C语言中的可变参数函数的浅析(以Arm 程序中的printf()函数实现为例)

我们在C语言编程中会遇到一些参数个数可变的函数,一般人对它的实现不理解。例如Printf():   Printf()函数是C语言中非常常用的一个典型的变参数函数,它 的原型为: int printf( const char* format, ...); 它除了一个参数format固定外,后面的参数的个数和类型是不确定的,如下列三种调用方法: 1.    printf(“%d\n”, i);

szkbsgy的专栏 2228

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C语言中printf(),sprintf(),scanf(),sscanf(),fscanf()的用法和区别

scanf(),sscanf(),fscanf()区别: 第一个是从控制台(键盘)输入; 第二个是从字符串输入; 第三个是从文件输入;   printf printf()函数根据format(格式)给出的格式打印输出到STDOUT(标准输出)和其它参数中。返回值是输出的字符数量。例: int a,b; a = printf("gelin\n");//

zoukangdlut的博客 966

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

C语言printf函数

C语言中的printf函数是标准格式化输出函数,用于向屏幕输出格式化字符串。其函数原型为int printf(const char *format,...),通过格式控制字符串指定输出类型和格式,支持多种数据类型(如%d、%f、%s等)和格式选项(标志、宽度、精度等)。printf还能处理转义字符(如\n、\t)实现特殊输出效果。该函数返回输出字符数,出错时返回负值并设置错误标志。

vbnetcx的博客 5万+

【C语言】printf()

C语言printf()基本用法,占位符,限定输出宽度,限定小数位数,保留正负号,输出部分字符串

石墨博客 5857

C语言printf函数详解

文章目录1、类型符(type)2、宽度(width)3、对齐标志(flags)4、精度(prec)5、格式化输出到字符串6、版权声明 C语言格式化输出的函数有printf、sprintf和snprintf等,功能略有不同,使用方法大同小异,本文以printf函数为例来介绍它们的用法。 对于 printf函数,相信大家并不陌生。之所以称它为格式化输出函数,该函数的声名如下: int printf(c...

C语言技术网 8293

C语言printf()输出格式大全

C语言printf()输出格式大全

smartchina的博客 2万+

C语言中scanf与printf的区别

之前没学过C语言,只学过C++,所以就来自学下C语言了,其实个人认为C与C++的区别很小,基本上就是printf与scanf这点输出和输入的区别了,如果还有什么区别的话那就是要包含的头文件是不同的。比如在C++中,是#include.而在C中是#include<stdio.h> 在调用printf与scanf的时候一定要包含#include<stdio.h> printf的...

qq_18671205的博客 2万+

printf打印函数的原理浅析

printf的底层原理浅析 前言   最近在学习linux内核的时候用到了自定义实现的printf,学习了一下,在此记录,希望有助于大家。   在C语言中,我们用到的最多的输出功能函数大概就是printf了。但以前只是调用C语言的库函数,具体printf是如何实现的呢? 说到底两件事: (1)、函数变参 (2)、格式解析   下面将简要介绍以上两点内容,最后附一个简单的printf例子。 函数变参...

xiaopan的博客 7335

C语言之printf( )详解

一、基本概念 1、printf() 是 C 语言标准库函数,用于将格式化后的字符串输出到标准输出。标准输出,即标准输出文件,对应终端的屏幕。使用 printf() 时 要加头文件 stdio.h。 2、函数原型: int printf ( const char * format, ... ); 3、返回值: 正确返回输出的字符总数,错误返回负值。与此同时,输入输出流错误标志将被置值,可由指示器函数 ferror(FILE *stream) 来检查输入输出流的错误标志,如果 ferror() 返回一个非零值

SG_teresa's blog 2万+

C语言scanf和printf

printf()是在标准库的头文件stdio.h定义的,使用这个函数前,必须将源码文件头部引入这个头文件。

qq_55973966的博客 2233
上一篇: C语言操作符2
下一篇: C语言之scanf浅析
大力初奇迹
博客等级 码龄3年 1294粉丝 54原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值