<問題>
data.txtというファイルの各行に整数を格納。(最大100個としておく) ファイルからデータを格納し、逆順に表示せよ。
<実行結果>
type data.txt (UNIXでは、cat data.txt) (ファイルの中身を表示)
3
4
5
(プログラムの実行)
5
4
3
<ヒント>
while (scanfがファイルの最後を読み込んでいない間) {
読み取った行の情報を処理
}
解答例 #include <stdio.h> #include <stdlib.h> /* ファイル操作に関係するライブラリ利用 */ #define N 100 /* プログラム中のNを100に置き換え。このような記法はマクロと呼ばれる。変数ではないことに注意 */ int main(void) { int data[N]; /* 100個 data[0] - data[99] */ int i; FILE *fp; /* ファイルポインターを準備 */ /* 以下、ファイルのオープン。読み込みなので、モードはr */ /* オープン失敗に対応する定番 */ if ((fp = fopen("data.txt", "r")) == NULL) { printf("ERROR : can't open\n"); exit (0); } /* fscanfの第一引数に, fpを指定 */ i = 0; while (fscanf(fp, "%d", &data[i]) != EOF) { /* END OF FILEまで読み込む */ i++; } fclose(fp); /* 閉じる。忘れないこと */ /* 逆にプリント。定番 */ for (i=i-1; i >= 0; i--) /* i個 読んだはず。配列は0からなので、i-1番目が最後の要素 */ printf("%d\n", data[i]); return 0; }