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

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

一、输出格式

  在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.mfbz.cn/a/781992.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CMD命令详细介绍 | 超详细版本!

文章目录 启动cmd命令用户启动使用管理员的账号启动 文件夹命令网络命令其他常用命令介绍常用快捷方式程序员相关命令 本文参考了博客园一篇帖子&#xff0c;ULR&#xff1a;cmd常用命令介绍(可收藏) - Mrwhite86 - 博客园 (cnblogs.com) CMD是Windows操作系统自带的命令行解释…

嵌入式C语言面试相关知识——内存管理(不定期更新)

嵌入式C语言面试相关知识——内存管理&#xff08;不定期更新&#xff09; 一、博客声明二、自问题目1、嵌入式系统的内存布局是怎么样的&#xff1f;2、动态内存分配在嵌入式系统中的使用有什么注意事项&#xff1f;3、什么是内存碎片&#xff0c;如何减少内存碎片&#xff1f…

恢复出厂设置后如何从 iPhone 恢复数据

在 iPhone 恢复出厂设置后&#xff0c;所有数据都会被删除&#xff0c;并且 iPhone 将恢复到原始出厂设置&#xff0c;这意味着您的所有 iPhone 数据&#xff0c;包括照片、视频、联系人和应用程序都将消失。 幸运的是&#xff0c;如果您有备份可以恢复&#xff0c;这并不一定…

Edge浏览器油猴插件的安装与使用

油猴 (又称篡改猴或Tampermonkey) 是最流行的浏览器扩展之一。它允许用户自定义并增强网页的功能。用户脚本是小型 JavaScript 程序&#xff0c;可用于向网页添加新功能或修改现有功能。使用油猴&#xff0c;您可以轻松在任何网站上创建、管理和运行这些用户脚本。 1.插件的安…

pycharm配置conda解释器

假如我新建了一个conda虚拟环境&#xff0c;名为python3.8

【数据结构与算法】快速排序霍尔版

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法》 期待您的关注 ​

鸿蒙NEXT不再支持安卓这条路真的走的通吗?

前言 看到高赞又是一片嘲讽&#xff0c;“apk换种打包方式”等等轻松拿几百赞&#xff0c;我也是无语。 国内多家互联网大厂都已经启动HarmonyOS Next应用开发&#xff0c;预计明年正式上线&#xff0c;如今业内很多人都已经知道了。 网络上相关报道也有很多&#xff0c;新浪…

06.C2W1.Auto-correct

往期文章请点这里 目录 OverviewAutocorrectWhat is autocorrect?How it works Building the modelMinimum edit distanceMinimum edit distance algorithmMinimum edit distance Part 2Minimum edit distance Part 3 往期文章请点 这里 Overview 本周学习目标&#xff1a;…

Vue 使用 @click 绑定点击事件

https://andi.cn/page/621505.html

oracle数据库默认表空间详解

文章目录 oracle数据库默认表空间列表 oracle数据库默认表空间列表 系统表空间&#xff08;System Tablespace&#xff09; 系统表空间包含了系统级别的元数据&#xff0c;如数据字典、系统表和存储过程等。例如SYSTEM表空间用于保存数据库的数据字典、PL/SQL程序的源代码和解释…

通信协议_Modbus协议简介

概念介绍 Modbus协议&#xff1a;一种串行通信协议&#xff0c;是Modicon公司&#xff08;现在的施耐德电气Schneider Electric&#xff09;于1979年为使用可编程逻辑控制器&#xff08;PLC&#xff09;通信而发表。Modbus已经成为工业领域通信协议的业界标准&#xff08;De f…

04.C1W3.Vector Space Models

往期文章请点这里 目录 Vector Space ModelsWord by Word and Word by DocWord by Document DesignWord by Document DesignVector Space Euclidean DistanceEuclidean distance for n-dimensional vectors Euclidean distance in PythonCosine Similarity: IntuitionCosine S…

验证回文串-string题目

用双指针&#xff0c;left right从两头往中间对比&#xff0c;不是字母的都略过&#xff0c;比的时候化成小写字母 125. 验证回文串 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:bool isPalindrome(string s) {if(s.size() < 1)return true;int left …

vue-org-tree搜索到对应项高亮展开

效果图&#xff1a; 代码&#xff1a; <template><div class"AllTree"><el-form :inline"true" :model"formInline" class"demo-form-inline"><el-form-item><el-input v-model"formInline.user&quo…

Git详细安装和使用教程

文章目录 准备工作-gitee注册认识及安装GitGit配置用户信息本地初始化Git仓库记录每次更新到仓库查看及切换历史版本Git忽略文件和查看文件状态Git分支-查看及切换Git分支-创建分支Git分支-合并及删除分支Git分支-命令补充Git分支-冲突需求: 准备工作-gitee注册 传送门: gite…

zabbix 与 grafana 对接

一.安装 grafana 1.初始化操作 初始化操作 systemctl disable --now firewalld setenforce 0 vim /etc/selinux/config SELINUXdisabled 2.上传数据包并安装 cd /opt grafana-enterprise-9.4.7-1.x86_64.rpm #上传软件包 yum localinstall -y grafana-enterprise-9.4.7-1…

Django QuerySet对象,exclude()方法

模型参考上一章内容&#xff1a; Django QuerySet对象&#xff0c;filter()方法-CSDN博客 exclude()方法&#xff0c;用于排除符合条件的数据。 1&#xff0c;添加视图函数 Test/app11/views.py from django.shortcuts import render from .models import Postdef index(re…

身边的故事(十四):阿文的故事:再买房

短短的一年多时间里&#xff0c;阿文仿佛从人生低谷完全走出来了。各种眼花缭乱的操作和处理事情方式让人觉得不可思议&#xff0c;是不是一个人大手大脚花钱惯了&#xff0c;让他重新回到艰苦朴素的日子是不是比死都难受呢&#xff1f;又或者像我这种靠勤勤恳恳的打工人是无法…

SpringMVC常见的注解

一、Spring MVC Spring Web MVC是基于ServletAPI构建的原始web 框架&#xff0c;一开始就包含在Spring 框架中&#xff0c;通常被称为“Spring MVC”。 1.MVC 是什么&#xff1f; MVC(Model、View、Controller&#xff09;是软件工程中的一种软件架构设计模型。它把软件系统分…

基于深度学习LightWeight的人体姿态之行为识别系统源码

一. LightWeight概述 light weight openpose是openpose的简化版本&#xff0c;使用了openpose的大体流程。 Light weight openpose和openpose的区别是&#xff1a; a 前者使用的是Mobilenet V1&#xff08;到conv5_5&#xff09;&#xff0c;后者使用的是Vgg19&#xff08;前10…