PROG 1.3 ファイルからN個のデータ入力。逆順に出力

<問題>

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;
}