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

news2024/11/14 14:57:24

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

一、输出格式

  在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.coloradmin.cn/o/1904270.html

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

相关文章

包/final/权限修饰符/代码块

包package 1、包的作用 包用来管理不同的类。 2、包名 包名要全部小写&#xff0c;一般是域名反写&#xff0c;如com.liu。在Java中&#xff0c;java解释器会将package中的.解释为目录分隔符/&#xff0c;也就是说该文件的目录结构为&#xff1a;...com/liu/... 3、全类名…

Nginx 报错问题汇总

目录 一、nginx: [emerg] invalid number of arguments in "include" directive in C:\Program Files\nginx-1.15.4/conf/nginx.conf:61 总结&#xff1a; 二、nginx: [error] OpenEvent("Global\ngx_reload_2152") failed (5: Access is denied) 解决…

《昇思25天学习打卡营第14天|onereal》

第14天学习内容如下&#xff1a; Diffusion扩散模型 本文基于Hugging Face&#xff1a;The Annotated Diffusion Model一文翻译迁移而来&#xff0c;同时参考了由浅入深了解Diffusion Model一文。 本教程在Jupyter Notebook上成功运行。如您下载本文档为Python文件&#xff0c…

LabVIEW的JKI State Machine

JKI State Machine是一种广泛使用的LabVIEW架构&#xff0c;由JKI公司开发。这种状态机架构在LabVIEW中提供了灵活、可扩展和高效的编程模式&#xff0c;适用于各种复杂的应用场景。JKI State Machine通过状态的定义和切换&#xff0c;实现了程序逻辑的清晰组织和管理&#xff…

IDEA常用技巧荟萃:精通开发利器的艺术

1 概述 在现代软件开发的快节奏环境中,掌握一款高效且功能全面的集成开发环境(IDE)是提升个人和团队生产力的关键。IntelliJ IDEA,作为Java开发者的首选工具之一,不仅提供了丰富的编码辅助功能,还拥有高度可定制的界面和强大的插件生态系统。然而,要充分发挥其潜力,深…

[激光原理与应用-101]:南京科耐激光-激光焊接-焊中检测-智能制程监测系统IPM介绍 - 5 - 3C行业应用 - 电子布局类型

目录 前言&#xff1a; 一、激光在3C行业的应用概述 1.1 概述 1.2 激光焊接在3C-电子行业应用 二、3C电子行业中激光焊接 2.1 纽扣电池 2.2 均温板 2.3 指纹识别器 2.4 摄像头模组 2.5 IC芯片切割 三、3C行业中激光切割 四、激光在3C行业中的其他应用 4.1 涂层去除…

SpringBoot源码阅读(1)——环境搭建

SpringBoot官网 官网 https://spring.io/projects/spring-boot 代码仓库 github&#xff1a;https://github.com/spring-projects/spring-boot gitee: https://gitee.com/mirrors/spring-boot 下载代码 git clone https://gitee.com/mirrors/spring-boot.git下载的代码中有些…

STM32-OC输出比较和PWM

本内容基于江协科技STM32视频内容&#xff0c;整理而得。 文章目录 1. OC输出比较和PWM1.1 OC输出比较1.2 PWM&#xff08;脉冲宽度调制&#xff09;1.3 输出比较通道&#xff08;高级&#xff09;1.4 输出比较通道&#xff08;通用&#xff09;1.5 输出比较模式1.6 PWM基本结…

数据库逆向工程工具reverse_sql

reverse_sql 是一个用于解析和转换 MySQL 二进制日志&#xff08;binlog&#xff09;的工具。它可以将二进制日志文件中记录的数据库更改操作&#xff08;如插入、更新、删除&#xff09;转换为反向的 SQL 语句&#xff0c;以便对系统或人为产生的误操作进行数据回滚和恢复。 *…

LabVIEW的Actor Framework (AF) 结构介绍

LabVIEW的Actor Framework (AF) 是一种高级架构&#xff0c;用于开发并发、可扩展和模块化的应用程序。通过面向对象编程&#xff08;OOP&#xff09;和消息传递机制&#xff0c;AF结构实现了高效的任务管理和数据处理。其主要特点包括并发执行、动态可扩展性和强大的错误处理能…

图神经网络实战(16)——经典图生成算法

图神经网络实战&#xff08;16&#xff09;——经典图生成算法 0. 前言1. 图生成技术2. Erdős–Rnyi模型3. 小世界模型小结系列链接 0. 前言 图生成算法是指用于创建模拟图或网络结构的算法&#xff0c;这些算法可以根据特定的规则和概率分布生成具有特定属性的图&#xff0c…

华为OSPF配置DR和BDR与指定DR

基础配置 <Huawei>sys #进入配置模式 Enter system view, return user view with CtrlZ. [Huawei]un in en #关闭报文弹窗 Info: Information center is disabled. [Huawei]sys R1 #设备名更改为R1 [R1]int g0/0/0 …

Vue3中的Composables组合式函数,Vue3实现minxins

Vue3中的Composables是什么 Vue3中的Composables 简单理解其实就是类React Hooks式的组合式函数封装方法。 Vue官方称为Composables 组合式函数。 1.抽离复用逻辑时 Vue2写法 &#xff08;1&#xff09;Vue2 中的mixins混入器写法缺点 (Vue3 optionsApi写法同理) 新建minxins…

硅纪元视角 | 中国电信“星辰大模型·软件工厂”,两分钟完成应用开发,效率飞跃!

在数字化浪潮的推动下&#xff0c;人工智能&#xff08;AI&#xff09;正成为塑造未来的关键力量。硅纪元视角栏目紧跟AI科技的最新发展&#xff0c;捕捉行业动态&#xff1b;提供深入的新闻解读&#xff0c;助您洞悉技术背后的逻辑&#xff1b;汇聚行业专家的见解&#xff0c;…

动手学深度学习(Pytorch版)代码实践 -循环神经网络- 56门控循环单元(`GRU`)

56门控循环单元&#xff08;GRU&#xff09; 我们讨论了如何在循环神经网络中计算梯度&#xff0c; 以及矩阵连续乘积可以导致梯度消失或梯度爆炸的问题。 下面我们简单思考一下这种梯度异常在实践中的意义&#xff1a; 我们可能会遇到这样的情况&#xff1a;早期观测值对预测…

Windows电脑下载、安装VS Code的方法

本文介绍Visual Studio Code&#xff08;VS Code&#xff09;软件在Windows操作系统电脑中的下载、安装、运行方法。 Visual Studio Code&#xff08;简称VS Code&#xff09;是一款由微软开发的免费、开源的源代码编辑器&#xff0c;支持跨平台使用&#xff0c;可在Windows、m…

C++ 模版进阶

目录 前言 1. 非类型模版参数 1.1 概念与讲解 1.2 array容器 2. 模版的特化 2.1 概念 2.2 函数模版特化 2.3 类模版特化 2.3.1 全特化 2.3.2 偏特化 3.模版的编译分离 3.1 什么是分离编译 3.2 模版的分离编译 3.3 解决方法 4. 模版总结 总结 前言 本篇文章主要…

在mac下 Vue2和Vue3并存 全局Vue2环境创建Vue3新项目(Vue cli2和Vue cli4)

全局安装vue2 npm install vue-cli -g自行在任意位置创建一个文件夹vue3&#xff0c;局部安装vue3,注意不要带-g npm install vue/cli安装完成后&#xff0c;进入目录&#xff0c;修改vue为vue3 找到vue3/node-moudles/.bin/vue&#xff0c;把vue改成vue3。 对环境变量进行配置…

【6】图像分类部署

【6】图像分类部署 文章目录 前言一、将pytorch模型转为ONNX二、本地终端部署2.1. ONNX Runtime部署2.2. pytorch模型部署&#xff08;补充&#xff09; 三、使用flask的web网页部署四、微信小程序部署五、使用pyqt界面化部署总结 前言 包括将训练好的模型部署在本地终端、web…

在Linux操作系统中去修复/etc/fstab文件引起的系统故障。

如果/etcfstab文件中发生错误&#xff0c;有可能导致系统无法正常启动。 比如&#xff1a;系统里的一块磁盘被删除&#xff0c;但是/etc/fstab中关于这块磁盘的信息依然被保存在文件/etc/fstab中。 主要看倒数后两行&#xff0c;系统提示&#xff0c;敲ctrlD或者是直接输入密码…