beat365官网下载苹果手机-365bet备用服务器-bt365投注

记录时光的故事

C语言printf的用法(非常详细和全面)

分类: bt365投注 时间: 2025-07-17 22:37:41 作者: admin 阅读: 6616
C语言printf的用法(非常详细和全面)

在C语言中,有三个函数可以用来向控制台(可以理解为显示器或者屏幕)输出数据,它们分别是:

输出函数

说明

用法演示

puts()

只能输出字符串,并且输出结束后会自动换行

puts("C language is great");

putchar()

只能输出单个字符

putchar('C');

printf()

可以输出各种类型的数据

printf("%d %c %s", 100, 'C', "C language");

printf() 是最灵活、最复杂、最常用的输出函数,可以完全代替 puts() 和 putchar(),大家一定要掌握。本文将是一个非常详细和全面的 printf() 用法参考手册,值得收藏,并反复查阅。

printf() 的用法

printf 是 print format 的缩写,意思是格式化打印,也就是向显示器上格式化输出数据。

严格来说,printf() 是向标准输出文件中输出数据,而这个标准输出文件通常来说都是“黑底白字”的控制台,或者说是显示器。

printf() 的标准用法(原型)为:

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

format 为格式字符串,由格式说明符和普通字符构成。其中:

普通字符按照原样输出,比如英文、数字、逗号、空格等;

格式说明符以%开头,比如 %d、%s、%c 等。

argument 表示将要输出的数据,多份数据以,分隔。数据的个数和类型,要与格式说明符一一对应。

printf() 会将 argument 格式化,并插入到 format 字符串中,代替对应的格式说明符。

int 表示 printf() 的返回值类型,也即处理结果的数据类型。输出成功以后,printf() 将返回输出的字符的个数;如果输出失败,将返回一个负数。

C语言 printf() 用法的简单举例:

#include

int main()

{

int age = 14;

char name[] = "Tom";

float score = 96.5;

int charNumber = 0;

charNumber = printf("Age:%d Name:%s Score:%f\n", age, name, score);

printf("本次输出%d个字符", charNumber);

return 0;

}

运行结果:

Age:14 Name:Tom Score:96.500000

本次输出34个字符

format 中的格式说明符

format 中的格式说明符其实比较复杂,它的标准写法如下:

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

末尾的 specifier 不能省略,其它由[ ]包围的部分可以省略。

specifier

specifier 是格式字符,它最重要,指明了要输出的数据的类型和形式。

specifier 的用法及说明

specifier

输出形式

示例

d 或者 i

有符号十进制整数

392

u

无符号十进制整数

7235

o

无符号八进制数

610

x

无符号十六进制整数

7fa

X

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

7FA

f

十进制浮点数(小写)

392.65

F

十进制浮点数(大写)

392.65

e

科学计数法(尾数+指数的形式),小写

3.9265e+2

E

科学计数法(尾数+指数的形式),大写

3.9265E+2

g

使用 %e 和 %f 中的较短形式输出

392.65

G

使用 %E 和 %F 中的较短形式输出

392.65

a

十六进制浮点数(小写)

-0xc.90fep-2

A

十六进制浮点数(大写)

-0XC.90FEP-2

c

字符

a

s

字符串

sample

p

指针地址

b8000000

n

对应的参数为一个指向 int 类型变量的指针。%n 不输出任何内容,而是用于将已经输出的字符个数(不包括 %n 对应的输出)存储到指针所指向的变量中。

printf() 的返回值也表示输出的字符个数,一般情况下两者是相等的。

%

% 后面再跟一个 %,会输出一个 %,可以看做 % 的转义形式

%

flags

flags 控制输出数据的对齐方式。

flags 的用法及说明

flags

说明

-

在给定的输出宽度内左对齐。如果不指明,默认为右对齐。

+

用于整数或小数,输出时强制加上正负号,即使对于正数也是如此。如果不指明,默认只有负数才加-符号。

空格

用于整数或者小数,输出值为正时冠以空格,为负时冠以负号。

#

对于八进制(%o)和十六进制(%x / %X)整数,# 表示在输出时添加前缀;八进制的前缀是 0,十六进制的前缀是 0x / 0X。

对于小数(%a / %A、%e / %E、%f / %F、%g / %G),# 表示强迫输出小数点。如果没有小数部分,默认是不输出小数点的,加上 # 以后,即使没有小数部分也会带上小数点。

0

当输出宽度不足时,在数字左侧填充 0,而不是空格。

width

width 用来表示输出宽度,也就是最少占用几个字符的位置。

width 的用法及说明

width

说明

数字

width 为一个整数时,表示最小的输出宽度。如果实际输出宽度不足 width,则以 flags 指定的方式来填充;如果 flags 没有指定,则以空格来填充。

当输出结果的宽度超过 width 时,width 不再起作用,按照实际宽度来输出。

*

宽度不在格式字符串 format 中指定,而是在对应的参数(输出数据)前面再增加一个额外的参数,专门用来指定输出宽度。

.precision

.precision 表示输出精度。对于不同的格式字符(specifier),精度的含义是不同的。

.precision 的用法及说明

.precision

说明

.数字

precision 为一个整数时:

对于 %d、%i、%o、%u、%x、%X 说明符(整数),precision 表示最小输出宽度;实际宽度不足时用 0 填充,实际宽度超过 precision 时不起作用,以实际宽度输出。和 width 不同的是,输出宽度不足时 precision 会在左边补 0,而不是空格。

precision 为 0 是一个特殊情况,如果对应的参数(输出数据)是 0,则不输出任何字符,如果对应的参数不为 0,则按实际值输出。

对于 %a、%A、%e、%E、%f、%F 说明符(浮点数),precision 表示小数的位数,也就是小数点后面的数字个数(默认情况下为 6):

当小数部分的位数大于 precision 时,会按照四舍五入的原则丢掉多余的数字;

当小数部分的位数小于 precision 时,会在后面补 0。

对于 %g 和 %G 说明符,precision 表示要输出的最大有效数字的个数。

对于 %s,precision 表示要打印的最大字符个数,超出 precision 部分会被截断。默认情况下,将打印所有字符,直到遇到结束标志\0。如果只有.没有precision,那么假定 precision 为 0,也就是不输出任何字符。

.*

精度不在格式字符串 format 中指定,而是在对应的参数(输出数据)前面再增加一个额外的参数,专门用来指定精度。

length

length 是 specifier 的子说明符,用来改变数据类型的长度。这意味着,对应的参数在适当的情况下可以进行类型转换,或者类型提升。

length 的用法及说明

格式字符(specifier)

length

%d %i

%u %o %x %X

%f %F %e %E

%g %G %a %A

%c

%s

%p

%n

默认(不指明 length)

int

unsigned int

double

int

char*

void*

int*

hh

signed char

unsigned char

signed char*

h

short int

unsigned short int

short int*

l

long int

unsigned long int

wint_t

wchar_t*

long int*

ll

long long int

unsigned long long int

long long int*

j

intmax_t

uintmax_t

intmax_t*

z

size_t

size_t

size_t*

t

ptrdiff_t

ptrdiff_t

ptrdiff_t*

L

long double

注意:对于 %c 说明符,虽然它要求的参数(输出数据)类型为 int 或者 wint_t,但是在格式化输出之前,会将其适当地转换为 char 或者 wchar_t 类型。

上面淡黄色背景的行,为 C99 标准引入的说明符或者子说明符。

printf() 用法举例

为了方便读者理解,这里给出几个有代表性的例子。

width 用法举例

#include

int main() {

int n = 234;

float f = 9.8f;

char c = '@';

char str[] = "C Language is great";

printf("%10d%12f%4c%8s", n, f, c, str);

return 0;

}

输出结果:

234 9.800000 @C Language is great

对输出结果的说明:

n 的指定输出宽度为 10,234 的宽度为 3,所以前边要补上 7 个空格。

f 的指定输出宽度为 12,9.800000 的宽度为 8,所以前边要补上 4 个空格。

str 的指定输出宽度为 8,"C Language is great" 的宽度为 19,超过了 8,所以指定输出宽度不再起作用,而是按照 str 的实际宽度输出。

.precision 用法举例

#include

int main(){

int n = 123456;

double f = 882.923672;

char *str = "abcdefghi";

printf("n: %.9d %.4d\n", n, n);

printf("f: %.2lf %.4lf %.10lf\n", f, f, f);

printf("str: %.5s %.15s\n", str, str);

return 0;

}

输出结果:

n: 000123456 123456

f: 882.92 882.9237 882.9236720000

str: abcde abcdefghi

对输出结果的说明:

对于 n,.precision 表示最小输出宽度。n 本身的宽度为 6,当 precision 为 9 时,大于 6,要在 n 的前面补 3 个 0;当 precision 为 4 时,小于 6,不再起作用。

对于 f,.precision 表示输出精度。f 的小数部分有 6 位数字,当 precision 为 2 或者 4 时,都小于 6,要按照四舍五入的原则截断小数;当 precision 为 10 时,大于 6,要在小数的后面补四个 0。

对于 str,.precision 表示最大输出宽度。str 本身的宽度为 9,当 precision 为 5 时,小于 9,要截取 str 的前 5 个字符;当 precision 为 15 时,大于 9,不再起作用。

flag 用法举例

#include

int main(){

int m = 192, n = -943;

float f = 84.342;

printf("m=%10d, m=%-10d\n", m, m); //演示 - 的用法

printf("m=%+d, n=%+d\n", m, n); //演示 + 的用法

printf("m=% d, n=% d\n", m, n); //演示空格的用法

printf("f=%.0f, f=%#.0f\n", f, f); //演示#的用法

return 0;

}

输出结果:

m= 192, m=192

m=+192, n=-943

m= 192, n=-943

f=84, f=84.

对输出结果的说明

当以%10d输出 m 时,是右对齐,所以在 192 前面补七个空格;当以%-10d输出 m 时,是左对齐,所以在 192 后面补七个空格。

m 是正数,以%+d输出时要带上正号;n 是负数,以%+d输出时要带上负号。

m 是正数,以% d输出时要在前面加空格;n 是负数,以% d输出时要在前面加负号。

%.0f表示保留 0 位小数,也就是只输出整数部分,不输出小数部分。默认情况下,这种输出形式是不带小数点的,但是如果有了#标志,那么就要在整数的后面“硬加上”一个小数点,以和纯整数区分开。

综合示例

#include

int main(){

printf("输出字符: %c %c \n", 'a', 65);

printf("输出十进制数: %d %ld\n", 1977, 650000L);

printf("用空格填充: %10d \n", 1977);

printf("用0填充: %010d \n", 1977);

printf("输出不同进制: %d %x %o %#x %#o \n", 100, 100, 100, 100, 100);

printf("输出小数: %4.2f %+.0e %E \n", 3.1416, 3.1416, 3.1416);

printf("指定宽度: %*d \n", 5, 10);

printf("输出字符串:%s \n", "C language is great");

return 0;

}

输出结果:

输出字符: a A

输出十进制数: 1977 650000

用空格填充: 1977

用0填充: 0000001977

输出不同进制: 100 64 144 0x64 0144

输出小数: 3.14 +3e+00 3.141600E+00

指定宽度: 10

输出字符串:C language is great

总结

为了满足实际开发中的各种需求,C语言 printf() 的用法比较复杂,对于初学者来说,全部记住可能比较困难。不要着急,慢慢来,暂时只要记住常用的即可;对于那些少见的格式,用到了再来查询也不晚。

printf() 的这些格式规范不是“小把戏”,优美的输出格式随处可见,例如,dos 下的 dir 命令,会整齐地列出当前目录下的文件,这明显使用了右对齐,还指定了宽度。

相关文章

《逍遥诀》手游伙伴系统曝光
万万没想到(2013)
2025电信补卡全攻略:线上线下流程费用及风险规避指南
长安马自达困境加深:EZ-6上市难改销量颓势,前路何在?
葪柏的意思
梦幻西游如何正确提交游戏问题反馈单