変換指定子 説 明
o
8進整数表記の文字の並びをunsigned int型の内部表現 形式に変換し、指定された記憶領域に格納する。[但し、
符号付きの入力データもOK。数字部は0 で始まってい ても良い。]
x X
16進整数表記の文字の並びを unsigned int型の内部表 現形式に変換し、指定された記憶領域に格納する。 [但 し、符号付きの入力データもOK。数字部は 0xや0X で 始まっていても良い。]
e E f g G
入力文字列を浮動小数点表記の実数と見てfloat型(型限 定子によってdoubleやlong doubleに指定変更可)の内 部表現形式に変換し、指定された 記憶領域に格納する。
c
「最大フィールド幅」部で指定された長さ(デフォルトは 1)の入力文字列を文字コードのまま(すなわち無変換で) 指定された記憶領域に格納する。但し、入力ストリーム の途中に空白類が現れても読み飛ばさない。また、格納 の際、ヌル文字’\0’は(最後に)付け加えられない。
s
空白類文字で区切られた入力文字列を次の入力と見て、
その文字コードの列を指定された記憶領域に格納する。
但し、格納の際、その文字コードの列の最後にヌル文字
’\0’ を付け加える。
[ 文字列 ]
文字集合 Σ =
文字列に現れる文字の集合
if 文字列が ’^’ 以外の文字で始まる 文字列に現れない文字の集合
if 文字列が ’^’ という文字で始まる 内の文字だけで構成される最長の文字列を入力データと して取り出し、その文字列の最後にヌル文字 ’\0’ を付 けた文字コードの列を指定された記憶領域に格納する。
p
ポインタ型データの出力形式(i.e.%p変換による出力の形 式;処理系に依存)をポインタ型の内部表現に変換し、指 定された記憶領域に格納する。
n それまでに読み込まれた文字の数を指定された記憶領域 に格納する。
%
次の文字が’%’ であることを確認する。[単に、書式指定 の中では ’%%’ で ’%’ という文字を表すということ。当 然、入力ストリームで次の文字が% になっていないと、
データ入力は中止(エラー)となる。]
5.6. 付録 書式付き入力 —scanf— 55
関数scanfにおける型限定子: データを格納する記憶領域の大きさについての認識を調
節するために、次の指定が可能。
型限定子 説 明
d, iまたはn変換の時、格納領域のデータ型がint と見 なされる。
(なし) u, o, xまたはX変換の時、格納領域のデータ型が un-signed int と見なされる。
e, E, f, g またはG変換の時、格納領域のデータ型が float と見なされる。
h d, iまたはn変換の時、格納領域のデータ型がshort int と見なされる。
u, o, xまたはX変換の時、格納領域のデータ型が un-signed short int と見なされる。
d, iまたはn変換の時、格納領域のデータ型が long int と見なされる。
l u, o, xまたはX変換の時、格納領域のデータ型が un-signed long int と見なされる。
e, E, f, gまたはG変換の時、格納領域のデータ型が double と見なされる。
L e,E,f,gまたはG変換の時、格納領域のデータ型がlong
double と見なされる。
関数scanfにおける最大フィールド幅の指定: 1個の入力データを表すための最大文字
数を正整数で指定できる。これが指定されていない場合は、文字数の上限は考慮されない。
関数scanfにおける代入抑止文字の指定: 星印 * を指定すると、この変換指定子に対
応する入力データは読み飛ばされる。
例 5.14 ([変換,代入抑止文字) 行末までのデータを読み飛ばすには、例えば次のように
書く。
scanf("%*[^\n]");
□演習 5.15 (理解度チェック) scanfの関数値は何か? また、途中の文字列を読み飛ば
すにはどうするか? 指定した文字から構成される文字列を読み込むにはどうするか?
より詳しくは、浦&原田(編)「C入門」の付録4、ケリー&ポール「CのABC(下)」の 第11.2節、等を参照して下さい。
6 処理の選択と繰り返し
• 3つの数の最大値(if文,if-else構文,論理演算, 条件演算子),
• 階乗 (for文), どうやって繰り返し構造を見出 すか?,
• 素数 (break文), 最大公約数 (ユークリッドの 互除法),
• 不定個の入力データの合計(while文),
• 元号表記→西暦表記(switch文),
• プログラムを組み立てられない時は...,
• 付録 制御構造のまとめ
この節では、下図の形の処理の流れがC言語でどの様に記述されるのかを見る。
True
False
True False
True
False False
False True
True ・・・
・・・ ・・・
True False
True False
True False
入力
True False 入力失敗