您的位置:首页 > 其它

printf的用法

2014-02-24 22:24 141 查看
在C++/C语言中,有一类库函数称为标准输入输出函数,可以用来从键盘读取键入的字符,以及将字符在屏幕上输出。这类函数的声明都包含在头文件 stdio.h 中。下面就先来谈谈主要的标准输出函数(printf函数)的用法:

一、printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。printf()函数的调用格式为:

printf("<格式化字符串>",<参量表>);

其中格式化字符串包括两部分内容:
一部分是正常字符, 这些字符将按原样输出;另一部分是格式化规定字符, 以"%"开始, 后跟一个或几个规定字符, 用来确定输出内容格式。

参量表是需要输出的一系列参数, 其个数必须与格式化字符串所说明的输出参数个数一样多, 各参数之间用","分开, 且顺序一一对应, 否则将会出现意想不到的错误。

格式化字符串的格式是:

%[标志][输出最小宽度][.精度][长度]格式字符

1、标志

标志 意义

- 结果左对齐,右边填空格

+ 输出符号(正号或负号)

空格 输出值为正时输出空格,为负时输出负号

# 在八进制和十六进制线显示前导航O,Ox

如果你还不太理解,没关系!请看下面的例子就会一目了然了:

例1:

#include<stdio.h>

int main()

{

int a=100;

float b=123.255;

printf("a=%d\n",a); // \n为转义字符,控制换行

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

printf("a=%-10d\n",a);

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

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

printf("a=%#o\n",a);

printf("a=%#x\n",a);

printf("b=%lf\n",b); //是否对此行的输出存有疑问,这都是float精度惹的祸,以后就知道如何对其

//修改了

return 0;

}

运行结果

a=100

a= 100

a=100

a=+100

a= 100

a=0144

a=0x64

b=123.254997

2.输出最小宽度:(1)用十进制整数来表示输出的最少位数。(至少要输出这么多位!)

(2)若实际位数多于定义的宽度:则按实际位数输出。

(3)若实际位数少于定义的宽度:a.则右对齐,左边留空。

b.有负号,左对齐,右边留空

c.表示宽度的数字以0开始,则右对齐,左边留空。

我们再来看一个例子:

例2:

#include<stdio.h>

int main()

{

int a=3456;

printf("a=%3d\n",a); //若实际位数多于定义的宽度:则按实际位数输出

printf("a=%10d\n",a); //若实际位数少于定义的宽度:则右对齐,左边留空

printf("a=%-10d\n",a); //若实际位数少于定义的宽度:有负号,左对齐,右边留空

printf("a=%010d\n",a); //若实际位数少于定义的宽度:表示宽度的数字以0开始,则右对齐,左边

//留空

printf("a=%-010d\n",a); //左对齐,0无意义。

return 0;

}

运行结果:

a=3456

a= 3456

a=3456

a=0000003456

a=3456

3.精度:精度格式符以“.”开头,后跟十进制整数。意义是:如果输出数字,则表示小数的位数;若实际位数大于所定义的精度数,则四舍五入。若不足则补0;如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。

例3:

#include<stdio.h>

int main()

{

printf("%.3f\n",12.3456);

printf("%.9f\n",12.3456);

printf("%.3s\n","abcdefg");

printf("%.9s\n","abcdefg");

return 0;

}

运行结果:

12.346 //四舍五入到小数点后三位

12.345600000 //不足补0

abc

abcdefg

所以对例1中的printf("b=%lf",b)只要该为printf("b=%.2lf",b)就可以对结果进行2位小数的保留了!

4.长度:长度格式符为h,l两种,h表示按短整型量输出,l表示按长整型量输出。

5.格式字符:

格式 意义

————————————————————————————

d: - 以十进制形式输出带符号整数(正数不输出符号);

u: - 以十进制形式输出无符号整数;

f: - 以小数形式输出单、双精度实数;

e: - 以质数形式输出单、双精度实数;

g: - 以%f,%e中较短的输出宽度输出单、双精度实数;

c: - 输出单个字符;

s: - 输出字符串。

————————————————————————————

注:l在d,o,x,u,前,指的输出精度为long型;在e,f,g前,指定输出精度为double型

最后还是来谈些转义字符吧:

转义字符是C语言中表示字符的一种特殊形式。通常使用转义字符表示ASCII码字符集中不可打印的控制字符和特定功能的字符,如用于表示字符常量的单撇号( '),用于表示字符串常量的双撇号( ")和反斜杠(
\)等。转义字符用反斜杠\后面跟一个字符或一个八进制或十六进制数表示。

转义字符 意义 ASCII码值(十进制)

\a 响铃(BEL) 007

\b 退格(BS) 008

\f 换页(FF) 012

\n 换行(LF) 010

\r 回车(CR) 013

\t 水平制表(HT) 009

\v 垂直制表(VT) 011

\\ 反斜杠 092

\? 问号字符 063

\' 单引号字符 039

\" 双引号字符 034

\0 空字符(NULL) 000

\ddd 任意字符 三位八进制

\xhh 任意字符 二位十六进制

字符常量中使用单引号和反斜杠以及字符常量中使用双引号和反斜杠时,都必须使用转义字符表示,即在这些字符前加上反斜杠。

在C程序中使用转义字符\ddd或者\xhh可以方便灵活地表示任意字符。\ddd为斜杠后面跟三位八进制数,该三位八进制数的值即为对应的八进制ASCII码值。\x后面跟两位十六进制数,该两位十六进制数为对应字符的十六进制ASCII码值。

使用转义字符时需要注意以下问题:

(1) 转义字符中只能使用小写字母,每个转义字符只能看作一个字符。

(2) \v 垂直制表和\f 换页符对屏幕没有任何影响,但会影响打印机执行响应操作。

(3) 在C程序中,使用不可打印字符时,通常用转义字符表示。

其他需要注意的一些问题:

1.如果用浮点数表示字符或整型量的输出格式, 小数点后的数字代表最大宽度, 小数点前的数字代表最小宽度。

例如: %6.9s 表示显示一个长度不小于6且不大于9的字符串。若大于9, 则第9个字符以后的内容将被删除。

2.使用printf函数时还要注意一个问题,那就是输出表列中的求值顺序。不同的编译系统不一定相同,可以从左到右,也可从右到左。Turbo C是按从右到左进行的。请看下面两个例子:

例4:

#include<stdio.h>

int main()

{

int i=8;

printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i++,i--,-i++,-i--);

return 0;

}

运行结果

8

7

7

8

-7

-8

例5:

#include<stdio.h>

int main()

{

int i=8;

printf("%d\n",++i);

printf("%d\n",--i);

printf("%d\n",i++);

printf("%d\n",i--);

printf("%d\n",-i++);

printf("%d\n",-i--);

return 0;

}

运行结果:

9

8

8

9

-8

-9

这两个程序的区别是用一个printf语句和多个printf 语句输出。但从结果可以看出是不同的。为什么结果会不同呢?就是因为printf函数对输出表中各量求值的顺序是自右至左进行的。在第一例中,先对最后一项“-i--”求值,结果为-8,然后i自减1后为7。再对“-i++”项求值得-7,然后i自增1后为8。再对“i--”项求值得8,然后i再自减1后为7。再求“i++”项得7,然后i再自增1后为8。再求“--i”项,i先自减1后输出,输出值为7。最后才求输出表列中的第一项“++i”,此时i自增1后输出8。但是必须注意,求值顺序虽是自右至左,但是输出顺序还是从左至右,因此得到的结果是上述输出结果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: