第13回(7月10日):授業の資料 ファイル処理

C言語プログラム応用 第13回 2014.7.10
• ファイル処理(第13章 p.290~)
– ファイルのオープンとクローズ
– ファイルからの読み込み
– ファイルへの書き込み
• 演習課題13-1 ★ 提出
• 演習課題13-2★ 提出
1
ファイルのオープンとクローズ
List 13-1
#include <stdio.h>
ファイル名
モード:読込を設定
int main (void) {
FILE *fp;
fp=fopen(“abc.txt” ,”r”); /* ファイルをオープン*/
if(fp==NULL)
printf(“ファイルをオープンできませんでした。¥n”);
else{
・・・・; /*ファイルからの読込などを行う*/
fclose(fp);
ファイルをクローズ
}
return(0);
}
fopen
オープン
返却値
・ 成功したら ポインタfp
・ 失敗したら 空ポインタ
fclose
クローズ
返却値
・ 成功したら 0
・ 失敗したら EOF
EOF については
p.198参照
ファイルの読込み
FILE *fp;
fp=fopen(“ファイル名”,”r”);
fscanf(fp, ”%d(書式)” ,&変数);
fclose(fp);
(キーボードからの読み込み)
scanf(”%d(書式)” , &変数);
ファイルへの書込み
FILE *fp;
fp=fopen(“ファイル名”,”w”);
fprintf(fp, ”%d(書式)” , 変数);
fclose(fp);
(ディスプレイへの表示)
printf(”%d(書式)” ,変数);
ファイルの読み込みと書き込み
fscanf(fp, ”%d(書式1)%lf(書式2)・・” ,&変数1,&変数2,・・);
返却値: 入力項目の個数を返す. 入力誤りが発生するとEOFの値を返す.
fscanf ( fp, “%d” , &x);
fscanf ( fp, “%s%lf%lf” , name, &height, &weight );
fprintf(fp, ”%d(書式1)%lf(書式2)・・” ,変数1,変数2,・・);
fprintf ( fp, “%-10s%5.2f%5.2f” , name, height, &weight );
左詰め10桁
List 13-2
Aiba 160 59.3
Kurata 162 51.6
Masaki 182 76.5
Tanaka 170 60.7
Tsuji 175 83.9
Washio 175 72.5
#include <stdio.h>
#include <stdlib.h>
int main (void) {
FILE *fp;
int ninzu = 0;
ファイル hw.dat
char name[100];
double height, weight;
double hsum = 0.0, wsum = 0.0 ;
if ( (fp = fopen(“hw.dat” ,”r”)) == NULL )
printf(“ファイルをオープンできません.¥n”);
else{
while ( fscanf ( fp, “%s%lf%lf “, name, &height, &weight ) == 3 ) {
printf (“%-10s %5.1f %5.1f ¥n”, name , height, weight );
ninzu++;
hsum += height; wsum += weight; }
printf( “ --------------------------------------¥n”);
printf(“平均
%5.1f %5.1f ¥n”, hsum/ninzu, wsum/ninzu);
fclose(fp);
}
return(0);}
演習課題13-1
hw.dat をメモ帳などを使って作成し,List13-2 を実行せよ.
ただし,hw.datはソースファイルがあるフォルダに置くこと
実行結果
演習課題13-2
キーボードから,名前,身長,体重を読み込んで,それを
ファイル( hw.out )に書き込むプログラムを作成せよ.
ファイルに書き込む形式はList 13-2と同様にすること.
実行結果としては,下記のように2名分の入力状況と,
hw.outファイルの内容を示せ.
演習課題13-2 ヒント1
#include <stdio.h>
#include <stdlib.h>
int main (void) {
FILE *fp;
if ( (fp = fopen(“hw.out” ,”w”)) == NULL )
printf(“ファイルをオープンできません.¥n”);
else{
}
return(0);
}
演習課題13-2 ヒント2
#include <stdio.h>
#include <stdlib.h>
int main (void) {
FILE *fp;
int retry; /*続けるか?*/
char name[100];
double height, wieght;
if ( (fp = fopen(“hw.out” ,”w”)) == NULL )
printf(“ファイルをオープンできません.¥n”);
else{
do{
printf(“名前: ”);
printf(“身長: ”);
printf(“体重: ”);
printf(“続けますか (Yes---1 / No----0) : “);
scanf(“%d”,&retry);
} while (
);
/* ファイルのクローズ*/
}
return(0);
}