例2
hashimoto 89 Nakahashi 67
Nakamoto 99
ipt1.dat
Tanaka 79 Nakata 73 ipt2.dat
hashimoto 89
Nakahashi 67
Nakamoto 99
例2
#include <stdio.h>
#define N 64 main()
{
char line[N];
FILE *fp_ipt1, *fp_ipt2, *fp_opt;
fp_ipt1=fopen(“ipt1.dat”, “r”);
fp_ipt2=fopen(“ipt2.dat”, “r”);
fp_opt=fopen(“opt.dat”, “w”);
while(fgets(line, N, fp_ipt1) != NULL) fputs(line, fp_opt);
while(fgets(line, N, fp_ipt2) != NULL) fputs(line, fp_opt);
fclose(fp_ipt1);
fclose(fp_ipt2);
fclose(fp_opt);
ファイルのオープン/クローズ関数
ファイルは読み書きを行う前にオープンし、使い 終わったらクローズする。
関数名 使い方 返値 機能
fopen FILE *fp;
fp=fopen(file, mode);
≠NULL:成功
=NULL:エラー
ファイルをmodeの 状態でオープンす る
fclose FILE *fp; =0: 成功
エラー
fpで示すファイル をmodeの状態で ファイル名
ファイルポインタ変数を宣言
ファイルオープンの mode
mode
動作 ファイルが 存在しない 場合ファイルが存 在した場合
“r”
ファイルから読み込 みエラー
“w”
ファイルへ書き出し 作成する 内容は失わ れる“a”
ファイルへ追加書き 出し作成する ファイルの最 後から追加
文字(バイト)の入出力関数
関数名 使い方 機能
fgetc int c;
FILE *fp;
c=fgetc(fp);
(EOF:エラーまたはEOF)
fpが示す位置から1 文字を読み込み、
ファイルポインタを1 つ進める。
fputc int c;
FILE *fp;
fputc(c, fp);
fpが示す位置に変 数cを書き出し、ファ イルポインタを1つ 進める。
文字列の入出力関数
関数名 使い方 機能
fgets #define N 64 char str[N];
FILE *fp;
fgets(str, N, fp);
(NULL:エラーまた はEOF)
fpが示す位置から文字列をstr[]に読み 込む。文字は
・N文字目まで
・改行まで
・ファイルの終わりまで
のいずれかの条件が満たされるまで 読み込まれる。
fputs char str[64];
FILE *fp;
fputs(str, fp);
fpが示す位置に文字列str[]を書き出す。
フォーマット化入出力関数
関数名 使い方 機能
fscanf FILE *fp;
fscanf(fp, “...”, ...);
(EOF:エラー)
scanfと同じ。ただし、標準
入力からでなくファイルから。
fprintf FILE *fp;
fprintf(fp, “...”,...);
printfと同じ。ただし、標準
出力でなくファイルに書き 出す。
その他の関数
関数名 書式 返値 機能
feof int feof(fp); 0:ファイルの 終わりでない
≠0:ファイルの 終わり
fpで示すファイルがエンドオブファ イルかどうかを調べる。
fflush int fflush(fp); 0:エラーなし EOF:エラー
fpで示すバッファをファイルに書き 出す。
fseek int fseek(fp, offset, mode);
0:実行終了
≠0:エラー
fpで示すファイルポインタをmode からoffsetバイト移動する。
0:ファイルの始め
1:現在のファイルポインタの位置 2:エンドオブファイル
rewind int rewind(fp); 0:実行終了
≠0:エラー
fpで示すファイルポインタをファイ ルの先頭に移動する。
第7回実習課題
1.線形探索を実現する関数
int LSearch(int n, int a[],
int x)
を作成し、その動作を確認できるプログラム(
ex07-lsearch.c
)を作成しなさい。ただし、n
はデータ の個数、a[]
はデータ配列である。2.二分探索を実現する関数
int BSearch(int n, int a[],
int x)
を作成し、その動作を確認できるプログラム(
ex07-bsearch.c
)を作成しなさい。ただし、n
はデータ の個数、a[]
はデータ配列である。また、探索過程に おいて、探索範囲内のデータを示しなさい。第7回実習課題
3.文字列をソートする選択ソート関数
void
SelectionSort(int n, char a[][64])
を作成し、その動作 を確認できるプログラム(ex07-ssort-str.c
)を作成しな さい。4.文字列を探索する二分探索関数
int BSearch(int n, char a[][64], char x[])
を作成し、その動作を確認でき るプログラム(ex07-bsearch-str.c)
を作成しなさい(発 展課題)。5.演習問題3のプログラム(