BBS水木清华站∶精华区

发信人: ax.bbs@bbs.ee.nthu.edu.tw. (athena), 信区: test 
标  题: 星星流讲座 0015 
发信站: ☆清华电机☆ (Sun May 14 12:35:45 1995) 
 
 
第 3 讲 之 8            基本的输入与输出 
                        Topic: Usage of scanf (2) 
 
scanf 的 Type 栏位其意义列表如下: 
 
        型态            意义 
        -------------------------------------------------- 
        c               单一字元,在此格式下所有的空白字元 
                        都不会被忽略,这是比较特殊的。 
        d               十进位有号整数。 
        e f g           有号浮点数,浮点数可以用科学记号的 
                        方式由键盘输入,scanf 会自动把 e或 
                        E 之後的数字当成次方数。 
        i               有号整数,可以是十进位、八进位 (以 
                        0 开头) 或十六进位 (以 0x 开头)。 
        n               此非真正的读取格式,对应此格式的参 
                        数必须为整数,它的内容是由键盘输入 
                        的字元数目。 
        o               无号八进位数 (不管有无 0 开头均视 
                        输入为八进位数)。 
        p               位址。 
        s               字串。 
        u               无号十进位数。 
        x               无号十六进位数 (不管有无 0x 开头均 
                        视输入为十六进位数)。 
        %               无特别意义,只是要求输入 % 这个字 
                        元。 
 
scanf 的 Size 栏位是用来配合 Type 栏位使用的,它的意义列表 
如下: 
 
        前置词          使用时机 
        -------------------------------------------------- 
        h               当以 d、i、o、x、u 读取整数值时, 
                        用以代表参数为短整数。 
        l               当以 d、i、o、x、u 读取整数值时, 
                        用以代表参数为长整数。以 e、f、g 
                        读取浮点数时则代表读取的数值型态 
                        为 mdouble0m。long double 
                        型态必须用大写的前置词 L 来指定。 
 
Type 栏位另有两种比较罕用的用法,列表如下: 
 
        型态            意义 
        -------------------------------------------------- 
        [...]           型态正比对 (pattern matching),它是 
                        用来比对输入字串用的。 
        [^...]          型态反比对,见例子。 
 
什麽叫做比对输入字串呢?请看□例程式: 
 
/* match.c */ 
#include <stdio.h> 
 
void main (void) 

     char s[10]; 
 
     printf ("Input string: "); 
     scanf ("%[12345]", s); 
     printf ("%s\n", s); 

 
执行结果: 
Input string: 123ab4 
123 
 
比对的意思就是找寻符合括号中字元集的最长字串,例如 123ab4 中 
含有数字 1-5 的最长字串是 123。%[12345] 这个格式字串可以简写 
成 %[1-5],请读者自己试试看。 
 
那麽,什麽叫做反比对呢?以上面的例子而言,如果我们把 %[1-5] 
改成 %[^1-5],那麽输入 123ab4 会得到 ab 这个输出,反比对的意 
思就是不符合括号中字元集的最长字串。 
 
对於 scanf 我们并不打算写一个完整的□例程式,没错,懒惰的作 
者又要给各位实作的机会了,请你自己动手写写看你能不能用 scanf 
读进所有型态的资料,再利用你上次写过的 printf 的程式里的方法 
把它们一一印出来。 
 
-- 
本文原作者为徐振家,原作刊载於星星神教总坛 ☆清华电机☆ test 板。 
你可以以电子文件的形式将本文自由流传於台湾学术网路,但必须包含此版权声明。 
原作者依中华民国著作权法之规定,享有本文之著作权,请勿抄袭以免触法。 
未经授权任何人不得以任何形式对本文做任何修改及商业上之应用。 
其他网路的转载或其他用途的应用,请先知会作者,并取得其同意。 
对本文有任何疑问或意见请 mail 给 ax.bbs@bbs.ee.nthu.edu.tw,谢谢。 
 
 

BBS水木清华站∶精华区