首页 百科知识 字符输出函数和格式输出函数

字符输出函数和格式输出函数

时间:2022-10-16 百科知识 版权反馈
【摘要】:对long型数据应用%ld格式输出,也可指定数据的输出宽度,如printf函数中的"%ld"可改为"%10ld",则输出为第8行, printf函数输出两个变量a、b的值。第9行,printf函数仍然输出两个变量a、b的值,只是在格式控制字符串中包含有普通字符,将普通字符原样输出即可。第10行,printf函数以不同的格式输出m的值。printf函数格式控制字符串中的格式说明符与输出参数的个数和类型必须一一对应,否则将会出现错误。

2.7.1 字符输出函数putchar和格式输出函数printf

1.字符输出函数putchar

putchar函数的作用是向终端输出一个字符。例如:

img87

例2-7 利用putchar函数输出字符。

img88

img89

运行结果:

  a

  A

putchar函数可以输出其他转义字符,如:

  putchar('\101');    /*输出字符′A′*/

2.格式输出函数printf

printf函数的一般格式为:

  printf(“格式控制字符串”,参数1,参数2,…);

按指定的格式控制要求,在标准输出设备(通常是终端)输出相应的参数值。例如:

  printf("a=%d,b=%f\n",a,b);

格式控制字符串包括两种信息:一种是格式说明,由%和格式字符组成,如%d,其作用是将输出的数据转换为指定的格式输出;另一种是普通字符,需要按原样输出。

参数是需要输出的数据。每个格式说明都对应一个参数,如printf函数中的%d对应参数a,%f对应参数b。

常用的格式字符及其作用如表2.7.1所示。

表2.7.1 printf函数常用的格式字符及其作用

img90

在格式说明中,在%和格式字符间可以插入附加符号(又称为修饰符)。如表2.7.2所示。

表2.7.2 printf函数中的附加格式说明符及其说明

img91

例如:

%ld—— 输出十进制长整型数;

%m.nf——输出m位浮点型数。

其中,m为域宽(整数位数+小数位数+小数点),n为小数位数(自动对n位后小数进行四舍五入)或n个字符;若输出数本身的长度小于m,则左边补空格,即为右对齐的方式。

%−m.nf——m、n意义同上。只是若输出数本身的长度小于m,则右边补空格,即为左对齐的方式。

1)整型数据的输出

①d格式符。用来输出十进制整数。有几种用法:

a.%d,按整型数据的实际长度输出。

b.%md,m为指定的输出数据的宽度。如果数据的位数小于m,则左端补以空格;若大于m,则按实际位数输出,例如:

printf("%4d,%4d",a,b);

若a=20,b=12321,则输出结果为

  20,12321     //20前面有两个空格

c.%ld,输出长整型数据。例如:

  long a=12 345 678;

  printf("%ld",a);

如果用%d输出,就会发生错误,因为整型数据的范围为−32768~32767。对long型数据应用%ld格式输出,也可指定数据的输出宽度,如printf函数中的"%ld"可改为"%10ld",则输出为

  12345678    //前面有两个空格

一个int 型数据可以用%d或%ld格式输出。

②o格式符。以无符号八进制数形式输出整数。例如:

  int i= −5;

  printf("%d, %o",i,i);

−5在内存单元中的存放形式(以补码形式存放)为

img92

输出结果为

  −5,177773

对于长整型数(long型)可以用%lo格式输出。同样也可指定输出宽度,例如:

  printf("%8lo",i);

输出为

  177773   //前面有两个空格

③x格式符,以无符号十六进制数形式输出整数。例如:

  int i= −5;

  printf("%d,%o,%x",i,i,i);

输出结果为

  −5,177773,fffb

同样可以用“%lx”输出长整型数,也可指定输出数据的宽度。

④u格式符,以十进制形式输出无符号整型数。

例2-8 整型数据的输出。

img93

程序分析:

第8行, printf函数输出两个变量a、b的值。其中a按实际宽度输出,b指定其输出宽度为3,输出结果为11 22 (_表示空格)。

第9行,printf函数仍然输出两个变量a、b的值,只是在格式控制字符串中包含有普通字符,将普通字符原样输出即可。

第10行,printf函数以不同的格式(十进制、八进制、十六进制、无符号整型)输出m的值。由于m= −1,在内存中存放时是按其补码的形式存放的:

img94

输出结果为m:−1,177777,f f f f,65535。

第11行,printf函数以普通整型输出n的值。由于n是一个长整型变量,其值为123456789,在输出时取出其低16位输出。其在内存中的存放形式为

img95

由于其低16位中的最高位为1,所以根据补码知识知道它是一个负数,输出结果为

   n= −13035

第12行,printf函数以长整型形式输出n的值。输出结果为

   n=123456789

程序的运行结果为

11 22

a=11,b=22

m:−1,177777,f f f f,65535

n=−13035

n=123456789

2)浮点型数据的输出

①f格式符,用来输出浮点型数(包括单、双精度),以小数形式输出。有几种用法:

a.%f,不指定输出宽度,由系统自动指定,使整数部分全部输出,并输出6位小数。注意,并非全部数字都是有效数字。单精度型浮点数的有效位数一般为7位。

b.%m.nf,指定输出的数据的宽度占m位,其中有n位小数。如果数值长度小于m,则左端补空格。

c.%-m.nf与%m.nf基本相同,只是如果数值长度小于m,输出的数值向左端靠齐,右端补空格。例如:

img96

输出结果为

234.567001**234.567001**  234.57**234.57**234.57

②e格式符。以指数形式输出浮点型数。有几种形式:

a.%e,不指定输出数据所占的宽度及小数位数,有的C编译系统默认输出5位小数,指数部分占4位(如e+02),其中‘e’占1位,指数符号占1位,指数占2位。数值按规范化指数形式输出(即小数点前必须有且仅有1位非零数字)。例如:

printf(″%e″,456.783);输出:4.56783e+02。输出的数据共占11列宽度(注:不同系统的规定略有不同)。

b.%m.ne和%−m.ne,m、n和‘−’字符的意义同前。此处n指拟输出数据的小数部分的小数位数。若f=456.783,则

printf("%e %10e %10.2e %.2e %−10.2e", f, f, f, f, f);输出为:

img97

第2个输出项按%10e输出,即只指定了m=10,未指定n,凡未指定n,默认使n=5,整个数据长11列,超过给定的10列,就突破10列的限制,按实际长度输出。第3个数据应占10列,其中小数部分占2列,而数值本身为8列,所以数值向右端靠,左边补2个空格。第4个数据按%.2e格式输出,只指定n=2,未指定m,自动使m等于数据应占的长度,为8列。第5个数据应占10列,数值只有8列,由于是%−10.2e,数值向左端靠,右边补2个空格(注:不同系统的规定略有不同)。

③g格式符,用来输出浮点型数,它根据数值的大小,自动选f格式或e格式(选择输出时占宽度较小的一种),且不输出无意义的零。如i=234.896,则

  printf("%f %e %g",i,i,i);

输出为

  234.895996 2.34896e+02 234.896

例2-9 浮点型数据的输出。

img98

程序输出结果:

x=1234.560059, y=1.234568

z=1234567.123457

z=1.23457e+06

z=1234570

z= 1234567.12345679

x= 1234.560

x=1234.560

x=1234.560

读者自己分析。

3)字符型数据的输出

①c格式符,用来输出一个字符。例如:

  char c='b';

  printf("%c",c);

输出字符'b'。注意:%c中的c是格式符,而逗号右边的c是变量名。

也可以指定输出的字符所占宽度。例如:

  printf("%4c",c);

则输出: b,即c变量输出共占4列,前3列补空格。

②s格式符,用来输出一个字符串。有几种用法:

a.%s,原样输出一个字符串。例如:

  printf("%s\n","Hello");

输出"Hel lo"字符串(不包括双引号)。

b.%ms,输出的字符串占m列,如果字符串本身长度大于m,则突破m的限制,将字符串全部输出;若字符串本身长度小于m,则左端补空格。

c.%−ms与%ms基本相同,只是若字符串本身长度小于m,则右端补空格。

d.%m.ns,输出共占m列,但只取字符串中左端n个字符。这n个字符输出在m列范围的右侧,左端补空格。如果n>m,则m自动取n的值,即保证n个字符正常输出。

e.%−m.ns,m、n意义同上。只是n个字符输出在m列范围的左侧,右端补空格。

例2-10 字符串的输出。

img99

img100

程序输出:

img101

在使用printf函数输出数据时,注意几点:

(1)printf函数格式控制字符串中的格式说明符与输出参数的个数和类型必须一一对应,否则将会出现错误。

(2)格式说明中的 % 和后面的格式字符之间不能有空格,除了X、E、G格式字符外,其他格式字符必须用小写字母,如%c不能写成%C。

(3)长整型数应该用%ld(或%lo、%lx、%lu)格式输出,否则会出现输出错误。

(4)printf函数的参数可以是常量、变量或表达式。在计算各参数值时,Turbo C采用自右至左的顺序求值。

(5)可以在printf函数中的“格式控制字符串”内包含2.2.3小节中的“转义字符”,如'\n'、'\t'、'\r'、'\b'等。

(6)如果想输出字符‘%’,则应该在“格式控制字符串”中连续用两个%表示,例如:

  printf("%f%%",2.0/3);

输出:0.666666%

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈