
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);
}

运行结果为:
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与前面的描述相同

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个字符

%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: 输出长整数数据.

②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
大家觉得你非常好
恶心
论文就有立足之地