發信人: ax.bbs@bbs.ee.nthu.edu.tw. (athena), 信區: test
標 題: 星星流講座 0015
發信站: ☆清華電機☆ (Sun May 14 12:35:45 1995)
轉信站: star
星星流講座 0015 C 語言講座
第 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 的程式裡的方法
把它們一一印出來。