第2回

第4回
ファイル入出力方法
1
データ処理にはファイル処理が
必要
この部分
2
ファイル入出力方法
ファイル入出力を行うためには、ファイルオープン
をしなければならない。
 また、使用し終わったファイルはクローズしなけれ
なならない。
 ファイルをオープンすると、OSからファイルを使
用するための情報が返ってくる。この情報のこと
をファイルポインタと呼ぶ。
 ファイルポインタには、バッファの位置、バッファ
内の現在位置、ファイルの読み書きのいずれか、
ファイルの種類といった、ファイルに関する情報を
含む構造体へのポインタである。

3
fopen()関数

fopen()関数は、ファイルとオープンし、ファイル
ポインタを返す関数である。
 書式は以下のとおり。
FILE *fp;
fp = fopen(”name”,
mode);

kojima.datというファイルがテキストファイルで、
読み取り専用でオープンしたい場合
FILE *fp;
fp = fopen(”kojima.dat”, ”rt”);
4
ファイルオープンモード
使用するモード
モード
補足説明
読み込み専用
r
ファイルが存在しなければならない
書き込み専用
w
ファイルが存在するとそのファイルは消去されて新しく作成される
読み書き両用
r+
ランダムファイルとして任意のレコードに対して読み書きができる
w+
ただし、任意のレコードを指定するには、fseek()関数を使用しな
ければならない
書き込み(追加)
a
ファイルが存在すれば後ろに追加。なければ新規に作成される
a+
その他
t
テキスト(アスキー)ファイルの指定
b
バイナリファイルの指定
ただし、バイナリファイルは、OSによってデータサイズが異なる
ことがあるので、移植を考えた場合には推奨できない
5
ファイルが存在しない時のエ
ラー処理
ファイルを読み取り専用でオープンする場
合、ファイルが存在しないといけない。
 存在しない場合のエラー処理の方法(雛
型)は以下のとおり(この場合、finがファイ
ルポインタ)

6
fclose()関数
ファイルは、プログラムが終了する前に必ず
fclose()関数を使用して、クローズされなければ
ならない。
 書式は下記のとおり

fclose(ファイルポインタ名);

なお、ファイルポインタ名は、ファイルをオープン
したときに返ってきたファイルポインタを示すも
のを使用する。
7
fprintf()関数:ファイルへの出力
オープンしたファイルへ出力する関数
 書式は以下のとおり

fprintf( ファイルポインタ名, 書式指定文字列, 引数1, 引数2

);
例:ファイルポインタ名が、fpであり、int型
のデータ(変数名をa, bとする)を2つ、ファ
イルに出力する場合
fprintf( fp, ”%d %d \n”, a, b);
8
fscanf()関数:ファイルから入力
ファイルからの入力は、fscanf()関数を使用する。
 書式は、scanf()関数とほとんど同じ

fscanf( ファイルポインタ名, 書式指定文字列, &引数1, &引数2 );

例:ファイルポインタ名が、fpであり、int型のデータ
(変数名をa, bとする)を2つ、ファイルから入力す
る場合
fscanf( fp, ”%d %d”, &a, &b);
9
例題:copyコマンド類似プログラム
10
演習課題6:100個のデータの
平均、分散






以下の仕様(1)(2)(3)を満足するプログラムを作成せよ
(1)課題4で作成した乱数発生プログラムを参考に、0か
ら100の間の数をランダムに100個作成し、ファイルに
セーブする。
(2)セーブしたデータを読み込み、平均、分散を計算し、そ
の結果を画面に表示するとともに、ファイル出力する。
(3)ファイルへの出力フォーマットは、下記のとおり。
平均 = 平均の計算結果
分散 = 分散の計算結果
ファイル名は、Kadai6_uyyyy(学修番号相当)
補足説明は次のページを参照
11
(平均および)分散
n個のデータの平均(m)、分散(v)は、下記
の式で計算することができる。
 ここで、I番目のデータがdi

12