Printf参数的详细说明

电脑杂谈  发布时间:2020-05-29 05:09:10  来源:网络整理

printf格式不对应_printf格式_c printf 格式

printf()函数

功能: 将某些类型的数据输出到终端(putchar只能输出字符,只能输出一个字符,而printf可以

要输出多个数据和任何类型)

首先,printf()的一般格式

printf(格式控制,输出列表);

示例:

int i = 3;

双倍f = 4.56;

printf(“ i =%d,f =%f \ n”,i,f);

printf()是一个函数,“格式控制”和“输出列表”是其参数. 可以表示为: printf(参数1,参数2,参数3,...,参数n);其中“参数1”表示“格式控制”;其余参数表示“输出列表”.

二,设置字符格式

1,d格式字符: 以十进制格式输出.

%d输出数字长度是变量值的实际长度

%mdm指定输出数据的宽度. 当数据本身的实际宽度小于m时,数据的左端将填充空格. 如果大于m,则根据实际位数输出数据.

%ld,%mld l(小写字母L)表示输出“长整数”数据

%0md,%0mld 0(数字0)表示位数小于m并填充0

注意: %后的m(数字控制)和0(小于0的数字后缀)也适用于其他格式字符.

示例: (□表示空格)

int i = 123;

long j = 123456;

printf(“%d□5d□05d,□ld□8ld□08ld”,i,i,i,j,j,j);

123□□□123□00123,□123456□□□123456□00123456

2,o(字母)格式字符: 以八进制格式输出整数. (不会出现负数格式)3. x格式字符: 以十六进制格式输出整数. (不会出现负数格式)4. U格式字符: 以十进制形式输出无符号整数. [示例3.2]

主要()

{unsigned int a = 65535;

int b = -2;

printf(“ a =%d,%o,%x,%u \ n”,a,a,a,a);

printf(“ a =%d,%o,%x,%u \ n”,b,b,b,b);

}

a = -1,177777,ffff,65535

b = -2,177776,fffe,65534

5,c格式字符: 用于输出字符. 也可以以字符格式输出值(介于0到255之间)的整数.

字符c;

printf(“%c”,c);

一个整数. 如果该值在0到255之间,则它也可以作为字符输出. 在输出之前,将整数转换为相应的ASCII字符. 相反,字符数据也可以以整数形式输出.

[示例3.3]

主要()

{char c ='a';

int i = 97;

printf(“%c,%d \ n”,c,c);

printf(“%c,%d \ n”,i,i);

}

printf格式不对应_printf格式_c printf 格式

运行结果为:

a,97

a,97

6,s格式字符: 用于输出字符串.

%s用于输出不带双引号的字符串. 示例: printf(“%s”,“ CHINA”);

%ms m指定宽度(当字符串的长度小于m时,请填充左侧的空格,如果该字符串较大,则根据实际宽度输出)

%-ms左对齐,当小于m时在右边填充空格

%m.ns输出占用m列,并且仅从字符串的左端开始取n个字符. 在第m列的右侧输出n个字符,并留有空格.

%-m.ns与上面相同,右边带有空格

7,f格式字符: 以实数格式输出.

将显示%f的全部部分,并以6位数字显示小数部分. 但并非所有显示的数字都是有效数字

%m.nf指定数据的宽度为m列,n位小数. 如果该值的长度小于m,则在左侧填充空格.

%-m.nf与%m.f相似,不同之处在于应在右侧添加空格

[示例3.5]

主要()

{float x,y;

x = 111111.111; y = 222222.222;

printf(“%f”,x + y);

}

程序输出:

333333.328152(实数运算中不可避免的错误)

[示例3.6]

主要()

{double x,y; x2,y2;

x = 1111111111111.111111111; y = 2222222222222.222222222;

x2 = 1111111111111.111; y2 = 2222222222222.222;

printf(“%f%f”,x + y,x2 + y2);

}

程序输出:

3333333333333.3330103333333333333.333010(相同)

从[情况3.6]和[情况3.7]中可以看出: (1)在实数运算中不可避免会出现错误. (2)Double(示例3.7)比float(示例3.6)更准确. (3)浮点实数(单精度)的有效位数为7位,双实数(双精度)的有效位数为16位,超过有效位数的输出和输入无意义. [示例3.7]

主要()

{

float f = 123.456;

printf(“%f□□f□□.2f□□%.2f□□%-10.2f”,f,f,f,f,f);

}

输出结果:

123.455994□□123.455994□□□□□□123.46□□123.46□□123.46

8,e格式字符: 以指数形式输出实数.

%e以归一化指数形式输出实数,系统自动给出小数点后6位,指数部分占5位

%m.ne与前面的描述相同

%-m.ne与前面的描述相同

c printf 格式_printf格式不对应_printf格式

9,g格式字符: 它将根据值的大小自动选择f格式或e格式以输出数据,并且不会输出无意义的0.

三个. 使用Note%是printf()的格式说明符. 若要直接输出字符%,请在格式控件中使用两个连续的%s. 示例:

printf(“%f %%”,1.0 / 3)

输出: 0.333333%.

#include

//

//作者: flyleaf

//

//功能: 只需测试printf的类型,主要是帮助mm检查那些异常的printf参数

//

//日期: 2004-12-27

//

//测试工具: vc7.0

//

int _tmain(int argc,_TCHAR * argv [])

{

浮点d = 3.14;

printf(“ d =%. 10e \ n”,d); //这里输出的6位数字都是垃圾数据,不准确

char ch [20];

strcpy(ch,“ 123456780123”);

int n = 2,m = 10;

/

}

程序输出:

3333333333333.3330103333333333333.333010(相同)

从[情况3.6]和[情况3.7]中可以看出: (1)实数运算中不可避免会出现错误. (2)Double(示例3.7)比float(示例3.6)更准确. (3)浮点实数(单精度)的有效位数为7位,双实数(双精度)

有效数字位数

是16位,并且超出有效位数的输出和输入是没有意义的. [例3.7] main()

{

float f = 123.456;

printf(“%f□□f□□.2f□□%.2f□□%-10.2f”,f,f,f,f,f);

}

输出结果:

123.455994□□123.455994□□□□□□123.46□□123.46□□123.46

8,e格式字符: 以指数形式输出实数. %e以标准指数的形式输出实数,系统自动给出小数点后6位,指数部分占5位.

%m.ne与前面的描述相同

%-m.ne与前面的描述相同

9,g格式字符: 它将根据值的大小自动选择f格式或e格式来输出数据printf格式不对应,并且不会输出无意义的0. 3.使用Note%是printf()的格式说明符要直接输出字符%,请在格式控件中使用两个连续的%s. 例如: printf(“%f %%”,1.0 / 3)

输出: 0.333333%.

1. 转化说明符

%a(%A)浮点数,十六进制数和p-(P-)表示法(C99)

%c个字符

printf格式不对应_printf格式_c printf 格式

%d个有符号十进制整数

%f个浮点数(包括浮点数和doulbe)

%e(%E)浮点指数输出[e-(E-)表示法]

%g(%G)浮点数不会显示无意义的零“ 0”

%我签名了十进制整数(与%d相同)

%u无符号十进制整数

%o八进制整数,例如0123

%x(%X)十六进制整数0f(0F)例如0x1234

%p指针

%s字符串

%%“%”

2. 徽标

左对齐: “-”,例如“%-20s”

右对齐: “ +”,例如“%+ 20s”

空格: 如果符号为正,将显示一个空格,如果符号为负,则将显示“-”,例如“%6.2f”

#: 对c,s,d,u类没有影响;对于o类,在输出时添加前缀o;对于x类,在输出时添加前缀0x;

对于e,g,f类型,仅当结果为小数时才给出小数点.

3. 格式字符串(格式)

[标记] [最小输出宽度] [. 精度] [长度]类型

“%-md”: 左对齐,如果m小于实际值,则根据实际输出.

“%m.ns”: 输出m位,从左侧开始输入字符串n位,当n> m或m省略时,在左侧填充空格m = n

例如“%7.2s”输入中国

输出“ CH”

“%m.nf”: 输出浮点数,m是宽度,n是小数点右边的数字

例如“%3.1f”输入3852.99

输出3853.0

长度: h短整形量,l是长整形量

printf格式控件的完整格式:

%-0m.n l或h格式字符

以下是格式说明的每个组成部分的说明:

①%: 表示格式描述的开始符号,必不可少.

②-: 是-表示左对齐输出,如果省略则表示右对齐输出.

③0: 0表示指定的间隙用0填充,如果省略,则表示指定的间隙未填充.

④m.n: m表示字段宽度,即相应的输出项在输出设备上占据的字符数. N代表准确性. 用于描述输出实数的小数位数. 指定n时,隐含精度为n = 6位数字.

⑤l或h: l整数类型是long类型,实数类型是double类型. h用于将整数类型的格式字符修改为短类型.

-----------------------------------

设置字符格式

格式字符用于指定输出项目的数据类型和输出格式.

①d格式: 用于输出十进制整数. 有几种用法:

%d: 根据整数数据的实际长度输出.

%md: m是指定输出字段的宽度. 如果数据的位数小于m,则左端将填充空格,如果数据的位数大于m,则将根据实际的位数进行输出.

%ld: 输出长整数数据.

printf格式不对应_printf格式_c printf 格式

②o格式: 以无符号八进制形式输出整数. 对于长整数,可以使用“%lo”格式进行输出. 您还可以指定字段宽度并以“%mo”格式输出.

示例:

主要()

{int a = -1;

printf(“%d,%o”,a,a);

}

运行结果: -1,177777

程序分析: -1为存储单元中的(1111111111111111)2(以补码形式存储),转换为八进制数为(177777)8.

③x格式: 以无符号十六进制形式输出整数. 对于长整数,可以使用“%lx”格式进行输出. 您还可以指定字段宽度并以“%mx”格式输出.

④u格式: 以无符号十进制形式输出整数. 对于长整数,可以以“%lu”格式输出. 还可以指定字段宽度并以“%mu”格式输出.

⑤c格式: 输出字符.

⑥s格式: 用于输出字符串. 有几种用法

%s: 例如: printf(“%s”,“ CHINA”)输出“ CHINA”字符串(不包括双引号).

%ms: 输出字符串占用m列. 如果字符串本身的长度大于m,则将超出m的限制,并输出所有字符串. 如果字符串的长度小于m,则在左侧填充空格.

%-ms: 如果字符串的长度小于m,则在m列的范围内,字符串在左侧,空格填充在右侧.

%m.ns: 输出占用m列,但仅从字符串的左端开始取n个字符. n个字符输出到m列的右侧,并在左侧留空格.

%-m.ns: 其中m和n与上述含义相同,在m列范围的左侧输出n个字符,并在右侧添加空格. 如果n> m,则自动取n值,以确保正常输出n个字符.

⑦f格式: 用于输出实数(包括单精度和双精度),并输出为十进制数. 有几种用法:

%f: 未指定宽度,全部输出整数部分,并输出6个小数位.

%m.nf: 输出总共占m列,并且有n个小数位printf格式不对应,例如值的宽度小于m则填充左端.

%-m.nf: 输出总共占据n列,其中n位小数,例如值的宽度小于m以便在右端填充空格.

⑧e格式: 以指数形式输出实数. 可以使用以下形式:

%e: 数字部分(也称为尾数)输出6个小数位,而指数部分则占用5或4位数字.

%m.ne和%-m.ne: m,n和“-”字符的含义与以前相同. 这里的n表示数据数字部分的小数位数,m表示整个输出数据所占的宽度.

⑨g格式: 自动选择f格式或e格式中较短的一种进行输出,并且不会输出无意义的零.

-----------------------------------

有关printf函数的进一步说明:

如果要输出字符“%”,则应在“格式控制”字符串中使用两个连续的%s,例如:

printf(“%f %%”,1.0 / 3);

输出0.333333%.

-----------------------------------

对于单精度数字,使用%f格式字符输出时,只有前7位是有效数字,而小数位是6.

对于双精度数字,使用%lf格式的字符输出时,前16位是有效数字,而6位是十进制数字.

####################################拾遗######## ###############################

由专家指出

m.n的格式也可以表示如下(示例)

charch [20];

printf(“%*. * s \ n”,m,n,ch);

前面的*表示总宽度,后面的*表示输出数量. 分别对应于外部参数m和n. 我认为此方法的优点是可以在语句外部分配参数m和n来控制输出格式. 今天(06.6.9)看到了另一种输出格式%n可以将输出字符串的长度值分配给变量,请参见以下示例:

int slen;

printf(“ hello world%n”和slen);

该变量在执行后被分配值为11.


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-226049-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...