printf

printf

学科 计算机
中文名 格式化输出
特点 变参函数
功能 向标准输出设备按规定格式输出信息
外语缩写 printf(函数名)
目录导航

基本简介

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

printf 是指格式化输出函数,主要功能是向标准输出设备按规定格式输出信息。printf 是C语言标准库函数,定义于头文件 <stdio.h>。printf 函数的一般调用格式为:printf("<格式化字符串>", <参量表>) 。输出的字符串除了可以是字母、数字、空格和一些数字符号以外,还可以使用一些转义字符表示特殊的含义 。

函数说明及应用示例

功能

在c语言printfprintf中产生格式化输出的函数(定义在 stdio.h 中),其向未重定向终端(显示器、控制台等)输出字符。

printf 函数在输出格式 format 的控制下,将其参数进行格式化,并在标准输出设备(显示器、控制台等)上打印出来。

返回值

如果函数执行成功,则返回所打印的字符总数,如果函数执行失败,则返回一个负数。

用法

//以下程序用于获得输入值i,j并将其输出(i,j之间以逗号隔开) #include<stdio.h> intmain() { inti,j; scanf("%d,%d",&i,&j); printf("i=%d;j=%d",i,j); return0; } //以下程序用于输出“XX” #include<stdio.h> intmain() { printf("XX"); return0; }

format

Format 参数是包含三种对象类型的一个字符串:

* 无格式字符复制到输出流;

* 转换规范,每个规范导致在值参数列表中检索 1 个或更多个项;

* 转义序列。

通常意义上format的格式如下:

%[flags][width][.prec][F|N|h|l]type

规定输出数据的格式,具体如下: [2]

type

type的 字符用于规定输出数据的类型,含义如下:

字符 对应数据类型 含义
d / i int 接受整数值并将它表示为有符号的十进制整数,i是老式写法
o unsigned int 无符号8进制整数(不输出前缀0)

u

unsigned int 无符号10进制整数

x / X

unsigned int 无符号16进制整数,x对应的是abcdef,X对应的是ABCDEF(不输出前缀0x)

f(lf)

float(double) 单精度浮点数用f,双精度浮点数用lf(尤其scanf不能混用)

e / E

double 科学计数法表示的数,此处"e"的大小写代表在输出时用的“e”的大小写

g / G

double 有效位数,如:%8g表示单精度浮点数保留8位有效数字。双精度用lg

c

char 字符型。可以把输入的数字按照ASCII码相应转换为对应的字符

s / S

char * / wchar_t * 字符串。输出字符串中的字符直至字符串中的空字符(字符串以'\0‘结尾,这个'\0'即空字符)

p

void * 以16进制形式输出指针
n int * 到此字符之前为止,一共输出的字符个数,不输出文本

%

无输入

不进行转换,输出字符‘%’(百分号)本身

m

  

  

打印errno值对应的出错内容,(例: printf("%m\n"); )

  

注:%g、%G在小数点位数四位或指数大于等于精度时用%e、%E,否则用%f。

flags

flags 规定输出样式,取值和含义如下:

字符

字符名称 说明
- 减号 左对齐,右边填充空格(默认右对齐)

+

加号 在数字前增加符号 + 或 -

0

数字零 将输出的前面补上0,直到占满指定列宽为止(不可以搭配使用“-”)
  空格 输出值为正时加上空格,为负时加上负号

#

井号

type是o、x、X时,增加前缀0、0x、0X

type是e、E、f、g、G时,一定使用小数点

type是g、G时,尾部的0保留

width

用于控制显示数值的宽度,取值和含义如下:

n(n=1,2,3,4,5,6...): 宽度至少为n位,不够以空格填充。

* 格式列表中,下一个参数还是width

width是一个可选的指定最小值字段宽度的十进制数字字符串。如果转换值 字符少于字段宽度,该字段将从左到右按指定的字段宽度填充。如果指定了左边调整选项,字段将在右边填充。如果转换结果宽于字段宽度,将扩展该字段以包含转换后的结果。不会发生截断。然而,小的精度可能导致在右边发生截断。

prec

用于控制小数点后面的位数,取值和含义如下:

无按缺省精度显示0

当type=d,i,o,u,x时,没有影响;

type=e,E,f时,不显示小数点

n(n=1,2,3...)

当type=e,E,f时表示的最大小数位数;

type=其他,表示显示的最大宽度

prec是指可选的精度。精度是一个 .(点)后跟十进制数字字符串。如果没有给出精度,按 0(零)对待。精度指定:

* d、o、i、 u、x 或 X 转换的最少数字显示位数。

* e 和 f 转换的基数字符后的最少数字显示位数。

* g 转换的最大有效数字位数。

* s 转换中字符串的最大打印字节数目。

F|N|h|l

表示 指针是否是 远指针或整数是否是长整数

F 远指针

N 近指针

h 短整数(short int)

l 长整数(long int) (此处如果与d搭配为%lld则为long long int(C99),与f搭配为%llf则为long double(C99))

[Argument]

包含需要输出的数据,可以是常量(字符常量、数字常量、字符串常量),变量,以及运算式。此处的数据应当与前面的format中的格式控制符一一对应(如果不对应会产生错误)。 [3]

例如:

inta=1; floatb=1.0; charstr[12]="HelloWorld"; printf("Thisisanexampleofprintf:\n"); printf("ais%d,bis%f,anda+b=%f",a,b,a+b); printf("Iwanttosay,%s",str);

转义序列

这些转义序列在字符串中会被自动转换为相应操作命令

表示

符号

意义

符号

意义

\a

铃声(提醒)

\b

Backspace

\f

换页

\n

换行

\r

回车

\t

水平制表符

\v

垂直制表符

\’

单引号

\”

双引号

\\

反斜杠

\?

文本问号

\ ooo (例如\024)

ASCII字符(OCX)

\xhh (例如:\x20)

ASCII字符(HEX)

\xhhhh

宽字符(2字节HEX)

例如,WCHAR f = L'\x4e00' 或 WCHAR b[] = L"The Chinese character for one is \x4e00"。

函数返回值

printf 函数的一般形式为:

intprintf(constchar*format,[argument]);

以上形式,我们在Visual C++里输入“printf”(将会看到)。

说明printf函数类型为整型,其返回值是整型值。

其值为printf实际控制输出的 字符 数。

printf函数实际上是将所有参数按 字符输出,根据该函数的参数1(const char *format),我们不难理解。

例如:

inta=6,b;//a的值为6 b=24;//b的值为24 printf("thevalueofprintfis:%d\n",a); printf("%d\n",b);

以上程序将会输出:

printfprintf

程序举例例一:

#include<stdio.h> #defineC"CProgramming" intmain(void) { inta=12345; floatb=5.12345678; chare,d,f; scanf("%c%c%c",&e,&d,&f); printf("intis:%d\n",a); printf("floatis:%f\n",b); printf("charis:%s\n",C); return0; }

例二

printf 也可以这样用(具体请参照 C 语法,字符串相关内容。这不是 printf 特有功能):

printf("123\n","456\n","789\n");

输出:

123

注意:

printf("123\n""456\n""789\n");

的输出结果与

printf("123\n");printf("456\n");printf("789\n");

是相同的。

因此输出多行时,也并不需要每行调用一次printf。

例三

妙用printf判断闰年程序

#include<stdio.h> intmain(void) { inta; scanf("%d",&a); printf("%s",a%(a%100?4:400)?"NO":"YES"); return0; }

(此例中用到了?:的运算符)

例四

#include<stdio.h> #include<string.h> intmain(void) { charch[20]; intm,n; strcpy(ch,"Happy!"); scanf("%d%d",&m,&n); printf("%*.*s\n",m,n,ch); return0; }

(此例中使用了 scanf函数和 strcpy函数)

其中前边*定义的是总的宽度,后边*是指定输出 字符个数。分别对应外边参数m和n。

输入:

10 3

输出:

Hap环境变量

下列环境变量影响 printf 命令的执行:

LANG 在 LC_ALL 和相应的环境变量(以 LC_ 开头)没有指定语言环境时,确定语言环境编目使用的语言环境。

LC_ALL 确定用于覆盖由 LANG 或其它任何 LC_环境变量设置的任何语言环境编目值的语言环境。

LC_CTYPE 确定把文本字节数据顺序解释为字符的语言环境;例如,单一字节对应多字节字符的参数。

LC_MESSAGES 确定写消息使用的语言。

LC_NUMERIC 确定数字格式编排的语言环境。此环境变量影响使用 e、E、f、g 和 G 转换字符编写的数字的格式。

注意事项

字符 对应数据类型 含义
d / i int 接受整数值并将它表示为有符号的十进制整数,i是老式写法
o unsigned int 无符号8进制整数(不输出前缀0)

u

unsigned int 无符号10进制整数

x / X

unsigned int 无符号16进制整数,x对应的是abcdef,X对应的是ABCDEF(不输出前缀0x)

f(lf)

float(double) 单精度浮点数用f,双精度浮点数用lf(尤其scanf不能混用)

e / E

double 科学计数法表示的数,此处"e"的大小写代表在输出时用的“e”的大小写

g / G

double 有效位数,如:%8g表示单精度浮点数保留8位有效数字。双精度用lg

c

char 字符型。可以把输入的数字按照ASCII码相应转换为对应的字符

s / S

char * / wchar_t * 字符串。输出字符串中的字符直至字符串中的空字符(字符串以'\0‘结尾,这个'\0'即空字符)

p

void * 以16进制形式输出指针
n int * 到此字符之前为止,一共输出的字符个数,不输出文本

%

无输入

不进行转换,输出字符‘%’(百分号)本身

m

  

  

打印errno值对应的出错内容,(例: printf("%m\n"); )

  

函数返回值

字符

字符名称 说明
- 减号 左对齐,右边填充空格(默认右对齐)

+

加号 在数字前增加符号 + 或 -

0

数字零 将输出的前面补上0,直到占满指定列宽为止(不可以搭配使用“-”)
  空格 输出值为正时加上空格,为负时加上负号

#

井号

type是o、x、X时,增加前缀0、0x、0X

type是e、E、f、g、G时,一定使用小数点

type是g、G时,尾部的0保留

打印较长字符串

符号

意义

符号

意义

\a

铃声(提醒)

\b

Backspace

\f

换页

\n

换行

\r

回车

\t

水平制表符

\v

垂直制表符

\’

单引号

\”

双引号

\\

反斜杠

\?

文本问号

\ ooo (例如\024)

ASCII字符(OCX)

\xhh (例如:\x20)

ASCII字符(HEX)

\xhhhh

宽字符(2字节HEX)

词条图册

相关百科
返回顶部
产品求购 求购