發信人: ax.bbs@bbs.ee.nthu.edu.tw. (athena), 信區: test
標  題: 星星流講座 0014
發信站: ☆清華電機☆ (Sun May 14 12:19:38 1995)
轉信站: star

星星流講座 0014         C 語言講座

第 3 講 之 7            基本的輸入與輸出
                        Topic: Usage of scanf (1)

現在我們來討論 C 語言中程式如何要求使用者輸入資料並處理之。
最常用的輸入方法是要求使用者由鍵盤輸入資料,而我們最常用的
函數就是 scanf 了。scanf 這個函數和 printf 有很多相似的地方
,只不過一個是做輸入的動作,另一個是做輸出的動作。先來看看
下面的範例程式:

/* input.c */
#include <stdio.h>

void main (void)
{
    int a;
    printf ("Please input an integer: ");
    scanf ("%d", &a);
    printf ("The integer you just input is %d\n", a);
}

執行結果:(高亮度部份為鍵盤輸入值)

Please input an integer: 2
The integer you just input is 2

scanf 和 printf 相似,它也是以格式字串來決定如何處理輸入的
資料的。不過它的格式字串比較簡單,只有四個欄位:

        %[*][Width][Size][Type]
        ↗   ↗      ↑       ↖
     忽略  欄寬   資料大小     資料型態
 

「忽略」這個欄位是個很好玩的設計,它代表使用者輸入的東西會
被忽略,但是使用者還非輸入不可,如:

/* trick.c */
#include <stdio.h>

void main (void)
{
    int a;

    printf ("Input two number: ");
    scanf ("%*d,%d", &a);
    printf ("a =%d\n", a);
}

scanf 對於輸入資料的處理是以空白字元為分隔的,什麼是空白字
元呢?就是 space、tab 和換行字元。scanf 會忽略所有的空白字
元,然後讀取格式字串中規定的資料。這在上面的例子中我們已示
範過了。

欄寬這個欄位是用來限制最大輸入字元數目的,例如

        scanf("%3d", &a);

表示輸入整數 a,a 的位數最多 3 位 (包括正負號也算一位),超
過的部分就不算了 (直接忽略當成沒看見)。