プログラミング演習II

「文字型データ」

参考資料: 拡張表記(エスケープシーケンス)

’A’や’z’のような通常の文字の他に拡張表記(エスケープシーケンス)と呼ぶものが存在する。例えば、今までに使ってきた printf()でメッセージを表示する際に、"Hello World\n"のように「\n」という表記があったが、これも拡張表記の一つである。(\n は改行を意味する)
「\n」のように、「\」(バックスラッシュ。Windowsでは文字コードの都合で円マークとして表示される)で始まる形式を拡張表記と呼ぶ。※「\」を含めると2文字で表現されるが、「\」とそれに続く文字を合わせて1文字を意味するので注意。

以下に、いくつかの代表的な拡張表記を示す。

\n    改行 (new line)
\t    水平タブ (horizontal tab)
\v    垂直タブ (vertical tab)
\b    バックスペース (backspace)
\a    アラート (alert) 
\'    シングルクォート
\"    ダブルクォート
\\    バックスラッシュ(windowsでは円マーク)
\?    疑問符

文字定数を記述する場合に1個の文字を「’」(シングルクォート)で囲んでいたが、文字定数として「’」(シングルクォート)を記述したい場合に下記のようにしたのでは、文法エラーになる。(文字定数を「’」(シングルクォート)で囲むため、文字定数のつもりの「’」(シングルクォート)が文字定数を囲むための「’」(シングルクォート)と解釈されるためである)

char c = ''';    /* 文法エラー */

文字定数として「'」(シングルクォート)を記述したい場合は、拡張表記を使って'¥''とする。

char c = '\'';  /* OK */

後で説明する文字列定数でも同様の問題があり、その場合は「"」(ダブルクォート)を拡張表記として表現する。

char string[] = "I said ¥"you are right.¥"";   /* "(ダブルクォート)を含む文字列の場合 */

以下のサンプルコードは1文字ずつ表示するプログラムである。

#include <stdio.h>

int main(void)
{
    /* putchar()は1文字を表示する関数 */
    putchar('A');     /* 'A' */
    putchar('\t');    /* 水平タブ */
    putchar('\'');    /* シングルクォート */
    putchar('x');     /* 'x' */
    putchar('\'');    /* シングルクォート */
    putchar('\t');    /* 水平タブ */
    putchar('B');     /* 'B' */
    putchar('\n');    /* 改行 */

    return 0;
}

実行結果は以下のようになる。水平タブ(文字の間の空白部分)やシングルクォートが表示されている。

A       'x'     B

  ※ 空白部分は水平タブ