printf函数

目录

1.printf 函数简介 

 2.格式控制

<1>: 说明符 

<2>:标志

<3>:最小宽度 

<4>:精度

<5>:类型长度

3.printf彩色输出


1.printf 函数简介 


printf 是指格式化输出函数,主要功能是向标准输出设备按规定格式输出信息。printf 是C语言标准库函数,定义于头文件 <stdio.h>。

函数原型为:

int printf ( const char * format, ... );

format -- 是格式控制字符串,包含了两种类型的对象:普通字符和转换说明。在输出时,普通字符将原样不动地复制到标准输出,转换说明并不直接输出而是用于控制 printf 中参数的转换和打印。每个转换说明都由一个百分号字符(%)开始,以转换说明结束,从而说明输出数据的类型、宽度、精度等。

返回值: 正确返回输出的字符总数,错误返回负值,与此同时,输入输出流错误标志将被置值,可由指示器ferror来检查输入输出流的错误标志。


 2.格式控制


 格式说明符遵循以下原型:

%[flags][width][.precision][length]specifier

flags --- 标志

wideth --- 最小宽度

.precision --- .精度

length --- 类型长度

specifier --- 指示符/说明符/分类符

说明符是最重要的组成成分,因为它定义了相应参数的类型和解释。


<1>: 说明符 
说明符输出示例
or i有符号十进制整数

printf("%d",1234);

输出 1234

u无符号十进制整数

printf("%u",1234);

输出 1234

o无符号八进制整数

printf("%o",1234);

输出 2322

x无符号十六进制整数

printf("%x",1234);

输出 4d2

X无符号十六进制整数(大写)

printf("%X",1234);

输出 4D2

f十进制浮点数(小写)

printf("%f",1234.5);

输出 1234.500000 (默认保存小数点后6位)

F十进制浮点数(大写)

printf("%f",1234.5);

输出 1234.500000 (默认保存小数点后6位)

e科学计数法(尾数/指数)小写

printf("%e",0.0000001234);

输出 1.234000e-07

E科学计数法(尾数/指数)大写

printf("%E",0.0000001234);

输出 1.234000E-07

g使用最短表示法:%e 或 % f 

printf("%g",0.0000001234);

输出 1.234e-07

G使用最短表示法:%E 或 % F

printf("%G",0.0000001234);

输出 1.234E-07

a十六进制浮点数(小写)

printf("%a",1234.5);

输出 0x1.34a0000000000p+10

A十六进制浮点数(大写)

printf("%A",1234.5);

输出 0X1.34A0000000000P+10

c字符

printf("%c\n",65);

输出 A 

s字符串

printf("%s","abcdefg");

输出 abcdefg

p字符指针地址

printf("%p","a");

输出 00907BD8

n什么也不打印,对应的实参必须是指向有符号int型的指针。到目前为止写入的字符数存储在指向的位置中
%一个%后面跟着另一个%字符将写入一个%

printf("%%");

输出 %

<2>:标志

字符名称说明
-减号在给定的字段宽度内左对齐(默认为右对齐)
+加号结果为正数,需要在结果前加上正号(默认情况下,只有负数前面有-号)
(space)空格如果不写入任何符号,则在值之前插入一个空格 (输出为+加空格)
##号flags是o、x、X时,增加前缀0、0x、0X。flags是a、A、e、E、f、g、G时,一定使用小数点。默认的,如果使用.0控制不输出小数部分,则不输出小数点。flags是g、G时,尾部的0保留。
0数字零当指定填充时,用0而不是空格左填充数字

 示例代码:

#include<stdio.h>
int main()
{
	printf("%6d\n", 100);  //默认右对齐,左边补空格
	printf("%-6d\n", 100); //左对齐,右边补空格
	printf("\n");

	printf("%+d %-d\n", 100, -100);//输出正负号
	printf("%d %d\n", 100, -100);
	printf("% d % d\n", 100, -100);//正号使用空格代替,负号正常输出
	printf("\n");

	printf("%o %#o %#x %#X\n", 100,100,100, 100);// # - 前缀为0、0x、0X
	printf("%.0f %#.0f\n", 100.0,100.0);//小数点后的值不输出但仍然使用小数点
	printf("%g %#g\n", 100.0, 100.0);//尾部的0保留
	printf("\n");

	printf("%06d\n", 100);//前面补0
	printf("\n");

	return 0;
}

运行结果为: 

<3>:最小宽度 

如果实际位数小于最小宽度应填补空格或者0;若实际位数大于最小宽度,则按实际位数输出。


最小宽度描述示例
数值十进制整数

printf("%06d\n", 100);

输出 000100

*星号。不显示指明输出最小宽度,而是以星号代替,在printf的输出参数列表中给出

printf("%0*d\n", 6,100);

输出 000100

<4>:精度
精度描述
.数值

对于整数说明符(d, i, o, u, x, x): precision指定要写入的最小位数。如果要写入的值比这个数字短,结果将用前导零填充。即使结果较长,该值也不会被截断。精度为0表示不为值0写入任何字符。

数量对于a, A, e, E, f和F说明符:这是小数点后要打印的位数(默认情况下,为6位)。

对于g和G说明符:这是要打印的有效位数的最大数目。

对于s :这是要打印的最大字符数。默认情况下,将打印所有字符,直到遇到结尾的null字符。如果指定的句点没有明确的精度值,则假定为0。

.*精度没有在格式字符串中指定,而是作为必须格式化的参数之前的附加整数值参数指定。

示例代码:

#include<stdio.h>
int main()
{
	printf("%.6d\n", 1234);//不够指定宽度,前面缺失的用0补充
	printf("\n");

	printf("%.6f\n", 1234.12345678);//超过指定精度,会被截断
	printf("\n");

	printf("%.6g\n", 1234.12345678);//最大有效位数目 -- 自己指定的
	printf("\n");

	printf("%.10s\n", "abcdefgh");//默认情况下,打印所有的字符
	printf("%.6s\n", "abcdefgh");//超过指定位数 --- 截断
	printf("\n");

	return 0;
}

运行结果为:

<5>:类型长度

 类型长度指明待输出数据的长度,相同类型可以有不同的长度。

eg: 整型包括短整型(16bit),整型(32bit),长整型(64bit)


注意关于c说明符:它接受int(或wint_t)作为参数,但在格式化输出之前执行适当的转换为char值(或wchar_t)。

注意:黄色行表示C99引入的说明符和子说明符。有关扩展类型的说明符,请参见<cinttypes>。


示例代码:

#include<stdio.h>
int main()
{
	printf("%d\n", 'A');//有符号整数
	printf("\n");

	printf("%hhd\n", 'A');//有符号 char
	printf("%hhu\n", 'A'+128);//无符号 char 
	printf("\n");

	printf("%hd\n", 12345);//有符号短整型
	printf("%hu\n", 67891);//无符号短整型
	printf("\n");

	return 0;
}

运行结果为:

3.printf彩色输出


彩色输出格式:

printf("\033[显示方式;字背景颜色;字体颜色m…\033[0m")

控制命令以 \033[ 开头,以m结尾,而中间则是属性码,属性代码之间使用 ; 分隔,如\033[1;34;42m ,最后以默认颜色 \033[0m 结尾,以避免影响后面正常打印!

显示方式:

样式显示方式
默认0
高亮显示1
下划线4
闪烁5
反白显示7
不可见8

 前景颜色和背景颜色:

颜色前景颜色背景颜色
黑色3040
白色3747
红色3141
绿色3242
黄色3343
蓝色3444
紫红色3545
青蓝色3646

示例代码:

#include<stdio.h>
int main()
{
	printf("\033[0m\033[1;31m%s\033[0m", "hello world");
	return 0;
}

运行结果为: 

 

更多示例:

#include<stdio.h>
int main()
{
	printf("\033[0m\033[1;31m%s\033[0m\n", "hello world");//红色字体

	printf("\033[0m\033[1;32m%s\033[0m\n", "hello world");//绿色字体

	printf("\033[0m\033[1;33m%s\033[0m\n", "hello world");//黄色字体

	printf("\033[0m\033[1;34m%s\033[0m\n", "hello world");//蓝色字体

	printf("\033[0m\033[1;35m%s\033[0m\n", "hello world");//紫红色字体

	printf("\033[0m\033[1;47;35m%s\033[0m\n", "hello world");//白色背景颜色,紫红色字体

	printf("\033[0m\033[1;43;37m%s\033[0m\n", "hello world");//黄色背景颜色,白色字体颜色

	return 0;
}

 运行结果为:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值