Linux 版 (精华区)
发信人: netiscpu (夜☆星光点点☆), 信区: Linux
标 题: ◇ 星星流讲座 0011
发信站: 紫 丁 香 (Sun Nov 8 18:26:05 1998), 转信
寄信人: guest.bbs@hgluo.hust.edu.cn
标 题: ◇ 星星流讲座 0011
发信站: 华南理工大学 BBS木棉站
日 期: Thu Feb 20 14:41:15 1997
发信人: ax.bbs@bbs.ee.nthu.edu.tw. (athena), 信区: test
标 题: 星星流讲座 0011
发信站: ☆清华电机☆ (Wed May 10 19:47:43 1995)
;35m第 3 讲 之 4 基本的输入与输出
Topic: Usage of printf (1)m
printf 是我们最常用的一个函数,它的功用是对资料做格式化,然後
把结果输出到萤幕上。printf 这个函数的函数原型放在 stdio.h 这个
标头档里,所以当我们要叫用 printf 这个函数之前,必须含入这个标
头档 #include <stdio.h>,这是因为函数在使用前必须经过宣告。
那麽,printf 的函数本体在那里呢?其实 printf 是标准函式库 (
standard library) 中的一个函数,标准函式库就是 C 语言标准中规
定每一个 C 语言编译器所必须提供的函数形成的集合,使用者只要含
入标准标头档 (standard header file),就可以叫用标准函式库中的
函数,前面提到过的连结器 ld 会自动地到函式库中去找寻 printf 的
函数本体。
printf 的格式很简单,它的基本使用法如下例:
printf ("%d \n", i);
□ □
格式 替换变数
(format string)
格式是一个字串,它指示 printf 应该如何地在萤幕上显示,如上例中
"%d \n" 就是指示 printf 印出一个整数,在整数的後面印出五个
空白,然後换行。以 % 开头的字 (word) 就是「变数列印格式」,它
基本上分为五个栏位:
欲列印变数的型态
□
%[Flags][Width][.Precision][Size][Type]
□ ↑ □ □
列印选择项 栏宽 浮点数精确度 欲代换变数的大小
栏宽为栏位宽度,例如 %8d 就表示列印一整数,但是最多只列印八个字
在萤幕上 (意即该整数超过八位的地方会被舍去)。
Type 为欲列印变数的型态,列表如下:
Type 型态 输出格式
------------------------------------------------------------
c char 单一字元
d int 有号的十进位数字
e float 或 double 以科学记号表示的有号数
如:-1234567e+002
E float 或 double 以科学记号表示的有号数
如:-1234567E+002
f float 或 double 列印浮点数,预设小数点後精度 6 位
g float 或 double 列印浮点数,预设小数点後精度 3 位
不列印不必要的 0 和小数点
指数次方小於 -4 或大於精确度栏位指
定值时以科学记号型式输出
G float 或 double 同 g,但输出科学记号时以 G 代 E
i int 有号的十进位数字
n int * printf 已列印的文字数目
o unsigned 无号八进位数
p void * 指标内含
s char * 字串
u unsigned int 无号十进位数
x unsigned 无号十六进位数,abcdef 小写
X unsigned 无号十六进位数,ABCDEF 大写
Flags 为列印选择项,列表如下:
Flag 意义 预设值
------------------------------------------------------------
- 向左对齐 向右对齐
+ 不论正负数均列印正负号 只有负数才列印正负号
空白 正数前加上空白 正数前不加空白
0 数字前补 0 数字前不补 0
# 强迫列印 prefix 和 postfix 不强迫
请看下面的□例程式:
/* printf1.c */
#include <stdio.h>
void main (void)
{
printf ("%8d\n%-8d\n", 1234, 1234);
printf ("%+8d\n", 1234);
printf ("% d\n", 1234);
printf ("%08d\n", 1234);
printf ("%x\n%#x\n", 0xc, 0xc);
}
执行结果:
1234
1234
+1234
1234
00001234
c
0xc
这儿比较不易理解的是 # 这个 flag 的作用。例如像十六进位数,我们在 C 语
言中会在它的前面加上 0x,但是如果使用 printf ("%x", 0xc); 这样儿印出来
的话前面的 0x 这个前置词 (prefix) 就会被去掉了,如果要保留的话就得加上
# 这个 flag。又如浮点数若恰巧为整数值,则小数点和其後面的 0 未必会被印
出来 (视厂商如何制作编译器),此时若加上 # 这个 flag 则小数点和其後面的
0 (也就是所谓的 postfix) 就会被列印出来。
--
本文原作者为徐振家,原作刊载於星星神教总坛 ☆清华电机☆ test 板。
你可以以电子文件的形式将本文自由流传於台湾学术网路,但必须包含此版权声明。
原作者依中华民国著作权法之规定,享有本文之著作权,请勿抄袭以免触法。
未经授权任何人不得以任何形式对本文做任何修改及商业上之应用。
其他网路的转载或其他用途的应用,请先知会作者,并取得其同意。
对本文有任何疑问或意见请 mail 给 ax.bbs@bbs.ee.nthu.edu.tw,谢谢。
--
m;32m※ 转寄:.华南网木棉站 bbs.gznet.edu.cn.[FROM: mtlab.hit.edu.cn]
--
Enjoy Linux!
-----It's FREE!-----
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: mtlab.hit.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.405毫秒