Linux 版 (精华区)

发信人: netiscpu (夜☆星光点点☆), 信区: Linux
标  题: ◇ 星星流讲座 0015
发信站: 紫 丁 香 (Sun Nov  8 18:27:25 1998), 转信


寄信人: guest.bbs@hgluo.hust.edu.cn 
标  题: ◇ 星星流讲座 0015
发信站: 华南理工大学 BBS木棉站
日  期: Thu Feb 20 14:41:21 1997

发信人: ax.bbs@bbs.ee.nthu.edu.tw. (athena), 信区: test
标  题: 星星流讲座 0015
发信站: ☆清华电机☆ (Sun May 14 12:35:45 1995)


;35m第 3 讲 之 8            基本的输入与输出
                        Topic: Usage of scanf (2)m

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: m123ab40m
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,谢谢。


--
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.270毫秒