Everything

fscanf


ストリーム入出力用ファイルからデータを入力し、書式に従って変換します。

[指定形式]

#include <stdio.h>

long fscanf(FILE *fp, const char *control[, ptr] ...);

[引数]

fp ファイルポインタ

control  書式を示す文字列へのポインタ

ptr,... 入力したデータを格納する記憶域へのポインタ

[戻り値]

正常:入力変換に成功したデータの個数

異常:入力データの変換を行う前に入力データが終了した時:EOF

[備考]

fscanf関数は、ファイルポインタfpの示すストリーム入出力用ファイルからデータを入力し、controlが指す書式を文字列に従って変換、編集して、その結果をptrの指す記憶域へ格納します。

データを入力するための書式の仕様を以下に示します。

 

【書式の概要】

書式を表す文字列は、以下の3種類の文字列から構成されます。

-

空白文字

空白(' ')、水平タブ('\t')あるいは改行文字('\n')を指定すると、入力データを次の空白類文字でない文字まで読み飛ばす処理を行います。

-

通常の文字

上の空白文字でも%でもない文字を指定すると、入力データを1文字入力します。ここで入力した文字は書式を表す文字列の中に指定した文字と一致していなければなりません。

-

変換仕様

変換仕様は、%で始まる文字列で、書式を表す文字列の後に続く引数の指す領域に入力データを変換して格納する方法を指定します。変換仕様の形式は次の規則に従います。

%[*][フィールド幅][変換後のデータのサイズ]変換文字

書式中の変換仕様に対して入力したデータを格納する記憶域へのポインタがない時は、その動作は保証しません。また、書式が終了したにもかかわらず、入力データを格納する記憶域へのポインタが残っている時は、そのポインタは無視されます。

 

【変換仕様の説明】

*指定

入力したデータを引数が指す記憶域に格納することを抑止します。

フィールド幅

入力するデータの最大文字数を10進数字で指定します。

変換後のデータのサイズ

d、i、o、u、x、X、e、E、f変換の時(表 7.13参照)、変換後のデータのサイズ(short型、long型、long long型、long double型)を指定します。これ以外の変換の時は、本指定を無視します。表 7.12にサイズ指定の種類とその意味を示します。

表 7.12

変換後のデータのサイズ指定の種類とその意味

 

種類

意味

1

h

d、i、o、u、x、X変換において、変換後のデータはshort型であることを指定します。

2

l

d、i、o、u、x、X変換において、変換後のデータはlong型であることを指定します。

また、e、E、f変換において、変換後のデータはdouble型であることを指定します。

3

L

e、E、f変換において、変換後のデータは、long double型であることを指定します。

4

ll

d、i、o、u、x、X変換において、変換後のデータはlong long型であることを指定します。

-

変換文字

入力するデータは、各変換文字が指定する変換の種類に従って変換します。ただし、空白類文字を読み込んだ場合、変換の対象として許されていない文字を読み込んだ場合、あるいは指定されたフィールド幅を超えた場合は処理を終了します。

表 7.13

変換文字と変換の内容

 

変換文字

変換の

種類

変換の方式

対応するパラメータの型名

1

d

d変換

10進数字の文字列を整数型データに変換します。

整数型

2

i

i変換

先頭に符号が付いている10進数字の文字列、あるいは最後にu(U)またはl(L)が付いている10進数字の文字列を整数型データに変換します。また、先頭が0x(あるいは0X)で始まっている文字列は、16進数字として解釈し、文字列をint型データに変換します。さらに、先頭が0で始まっている文字列は、8進数字として解釈し文字列をint型データに変換します。

整数型

3

o

o変換

8進数字の文字列を整数型データに変換します。

整数型

4

u

u変換

符号なしの10進数字の文字列を整数型データに変換します。

整数型

5

x

x変換

16進数字の文字列を整数型データに変換します。

x変換とX変換に意味の違いはありません。

整数型

6

X

X変換

7

s

s変換

空白、水平タブ、改行文字を読み込むまでをひとつの文字列として変換します。文字列の最後にはヌル文字を付加します(変換したデータを設定する文字列は、ヌル文字を含めて格納できるサイズが必要です)。

文字型

8

c

c変換

1文字を入力します。この時、入力する文字が空白類文字であっても読み飛ばすことはしません。もし、空白類文字以外の文字だけを読み込む時は、%1sと指定してください。また、フィールド幅が指定されている時は、その指定分の文字が読み込まれます。したがって、この時、変換したデータを格納する記憶域は、指定分の大きさが必要です。

char型

9

e

e変換

浮動小数点型を示す文字列を浮動小数点型データに変換します。e変換とE変換、g変換とG変換にそれぞれ意味の違いはありません。入力形式はstrtod関数で表現できる浮動小数点型です。

浮動小数点型

10

E

E変換

11

f

f変換

12

g

g変換

13

G

G変換

14

p

p変換

fprintf関数において、p変換で変換される形式の文字列をポインタ型データに変換します。

void型へのポインタ型

15

n

データの変換は生じません。

データの入力は行わず、いままでに入力したデータの文字数が設定されます。

整数型

16

[

[変換

[の後に文字の集合、その後に]を指定します。この文字集合は、文字列を構成する文字の集合を定義しています。もし、文字集合の最初の文字が^でない時は、入力データはこの文字集合にない文字が最初に読み込まれるまでをひとつの文字列として入力します。もし、最初の文字が^の時は、^を除いた文字集合の文字が最初に読み込まれるまでをひとつの文字列として入力します。入力した文字列の最後には自動的にヌル文字を付加します(変換したデータを設定する文字列は、ヌル文字を含めて格納できるサイズが必要です)。

文字型

17

%

データの変換は生じません。

%を読み込みます。

なし

 

変換文字が表 7.13に示す文字以外の英文字の時は、その動作は保証しません。また、その他の文字の時は、その動作は処理系定義です。