【C语言】printf 标准输出函数(详解+用法)

printf是C语言中的标准输出函数,用于格式化控制输出。它比C++的cout在某些情况下更灵活,如格式控制。本文详细介绍了printf的使用,包括specifier、width、flags和.precision等参数,提供了多个示例来说明如何控制整数、浮点数、字符串和字符的输出格式。学习printf能更好地理解和掌握C语言的底层输出机制。
摘要由CSDN通过智能技术生成

为什么要学习printf?

printf是用来标准输出(显示器)的函数,有人一定会说“我会用cout,为什么要学习prinf?”。确实cout在部分使用上比printf方便,因为不用一直主动格式化控制输出,利用C++的新语法函数重载,让编译器完成了该部分工作。按道理来说,C中的printf是C++的cout的祖宗,我们最先该掌握的也是printf才是(C++是由C质变产生的,C++兼容C这点一定要知道)。
当你曾用cout格式控制过小数输出,就明白cout的痛苦了吧。我们之所以要学习printf,主要原因就是这个,你不必再包头文件,不必记忆晦涩的标识符,只需要简单掌握printf的使用。

printf详解+用法

printf头文件:<stdio.h>
printf功能:向显示器进行格式化控制标准输出。
printf函数声明:

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

format是格式化控制的字符串,后面…是要被格式化输出的参数。
一个格式化控制的字符串最多具有以下信息:
%[flags][width][.precision][length]specifier
我们主要需要掌握的就是flags(标记),width(宽度),.precision(精度),specifier(分类符)。
注意:要按顺序控制。

specifier

主要需要掌握,下面实例中的几种。

#include<stdio.h>
//因为没用C++新语法,所以不包C++头文件也是完全可以的

int main()
{
	//\n是转移字符用来换行的,除了格式化控制字符,字符串里的其它字符也会被输出
	printf("%d\n", 1);//d
	printf("%i\n", 2);//i,d和i都是用来格式化有符号十进制整型输出的,使用效果一样
	printf("%u\n", -1);//u是用来格式化无符号整型输出的
	printf("%o\n", 9);//o是用来格式化无符号八进制数的
	printf("%x\n", 17);//x是用来格式化无符号十六进制数的
	
	printf("%f\n", 3.14f);//f是用来格式化十进制单精度浮点型的
	printf("%lf\n", 3.1415926);//lf是用来格式化十进制双精度浮点型的
	printf("%e\n", 520.1314);//e是用来格式化为科学计数法输出的

	printf("%c\n", 'a');//c是用来格式化单字符的
	printf("%s\n", "Hello C");//s是用来格式化字符串的

	int a = 0;
	printf("%p\n", &a);//p是用来格式化指针地址的
	
	return 0;
}

输出实例

width

宽度格式化控制就只有这两种。

#include <iostream>
int main()
{
	printf("%3d\n", 1);//3是输出的字符宽度控制,默认右对齐,当原应输出字符数目不及3个时,用空格补充
	printf("%3d\n", 1314);//原应输出字符数目超过3个,则正常输出

	printf("%*d\n", 3, 1);//*代表需要多传一个参数,这个参数用来控制输出字符宽度,比如这里就是3
	
	return 0;
}

输出实例

flags

我们可以主要掌握以下几种

#include <iostream>
int main()
{
	printf("%-3d\n", 1);//将默认右对齐改为左对齐
	printf("%+d\n", 1);//强制给输出加上正负号,默认情况下只有负数才加负号
	printf("%-+3d\n", 1);//可以尝试综合理解下,这个格式化控制输出
	printf("% d\n", 1);//在输出的字符前,增加一个空格

	printf("%#o\n", 9);//将8进制或者16进制等省略的字符加上
	printf("%#x\n", 17);

	printf("%03d\n", 1);//用0补充宽度不够的字符,而非空格
	
	return 0;
}

输出实例

.precision

我们主要需要掌握以下几种使用

#include <iostream>
int main()
{
	//对于整数指定器(d,i,o,u,x):精度指定要写入的最小数字。
	//如果要写的值比这个数字短,结果会用前导零填充。
	//即使结果较长,该值也不会被截断。
	//精度为0意味着不写值0的字符。如果指定的周期没有明确的精度值,则假定为0。
	printf("%.3d\n", 1);
	printf("%.3d\n", 1314);
	printf("%d\n", 0001);
	//对于f和lf指定器:这是要在小数点后打印的数字(默认为6)。
	printf("%.3lf\n", 3.1415926);
	//对于s:这是要打印的最大字符数。默认情况下,所有字符都被打印,直到遇到结束的空字符。
	printf("%s\n", "hello world");
	printf("%.5s\n", "hello world");

	printf("%.*d\n",3, 1);//多传一个参数用来代表控制精度,其它和上面一样
	return 0;
}

输出实例


在复杂的格式化控制上,printf确实比cout好用,希望以上能帮助到你。
码字不容易,欢迎关注、点赞、收藏、评论、转发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱code的清隆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值