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

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

大家好,欢迎来到IT知识分享网。

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



一、输出格式

  在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.; 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; } 

在这里插入图片描述

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/120080.html

(0)
上一篇 2025-11-01 07:15
下一篇 2025-11-01 07:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信