發信人: ax.bbs@bbs.ee.nthu.edu.tw. (athena), 信區: test
標  題: 星星流講座 0008
發信站: ☆清華電機☆ (Fri May  5 22:37:48 1995)
轉信站: star

星星流講座 0008         C 語言教室

第 3 講 之 1            字元
                        Topic: Characters

電腦除了用來處理數值方面的資料之外,它也被廣泛地應用於處理文字
方面的資料。C 語言提供了字元 char 這個型態供我們儲存文字資料之
用,每一個 char 型態的變數可以儲存一個英文字元。請看下面的範例
程式:

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

main ()
{
    char a, b;
    a = 'a';
    b = 0x65;

    printf ("%c %c\n", a, b);
}

執行結果:

a e

上面的程式中示範了兩種給定字元初值的方法,第一種方法是直接把英文
字母用單引號 ' 括起來,然後指定給 char 型態的變數;第二種方法是給
定這個字母的 ASCII 碼。程式中 printf 的參數變成 %c ,眼尖的讀者
應該發現了,%c 是指定 printf 顯示字元用的。

在電腦中有某些特殊字元是沒有辦法在螢幕上顯示出來的,有某些字元如
單引號 ' 和倒斜線 \ 在 C 語言中有特殊的意義,如果我們想要儲存這
種字元那要怎麼辦呢? C 語言提供了逸出序列 (escape sequence) 作為
一種變通的解決方法,表列如下:

        原來的字元      在 C 語言中的表示方法  註解
       
        beep            \a                    
        倒退            \b                     backspace key
        跳頁            \f                     form feed
        換行            \n                     line feed
        印字頭歸位      \r                     carriage return
        水平 tab        \t                     horizontal tab
        垂直 tab        \v                     vertical tab
        倒斜線 \        \\                     backslash
        問號 ?          \?                     question mark
        單引號 '        \'                     single quote
        雙引號 "        \"                     double quote
                        \ooo                   octal ASCII code
                        \xhh                   hex ASCII code

逸出序列用在什麼時候呢?像上列的表中,beep、倒退、跳頁、換行、印
字頭歸位、水平 tab 和垂直 tab 是無法寫在程式中的字元 (因為會直接
反應在你的螢幕、喇叭和印表機上),這時候可以用逸出序列來代替,一個
很直接的例子就是我們一直用在 printf 中的 \n,它就是代表換行的字元。
另外如倒斜線、單引號、雙引號、問號是在 C 語言中有特殊意義的符號,
為了避免混淆,當要顯示這些符號時必須使用逸出序列。

逸出序列的最後有兩個比較奇特的東西,我們在此稍做說明:我們知道 ASCII
碼一共有 128 個字元,所以只要使用 7 個 bit 就可以儲存了,而 ASCII
的標準是每個字元以 8 個 bit 儲存,多出來的 1 bit 保留。那麼,一個
字元的 ASCII 碼就可以用三位數的八進位數字來表示 (如 e = \145),也可
以用兩位數的十六進位數字來表示 (如 e = \x65),當要用來表示一些奇怪
的字元時就可以派的上用場了。