C言語

【C言語】第7章第2回:ファイルへの書き込みと読み込み

C言語でのファイル操作の基本である「書き込み」と「読み込み」の手法を学びます。データを永続的に保存し、再利用するための基礎を身につけましょう。

0. 記事の概要

この記事を読むメリット

  • データ管理能力の向上:ファイルを使ってデータを保存し、効率的に読み取る方法を学べます。
  • 応用力の向上:より高度なデータ操作に必要なスキルを習得できます。
  • 実践的な知識:プロジェクトやシステム開発で役立つファイル操作の基礎を習得します。

この記事で学べること

  • ファイルにデータを書き込む基本的な方法
  • ファイルからデータを読み取る基本的な方法
  • エラー処理の基本

活用のイメージ

例えば、ログデータの記録や、設定データの読み書きなど、C言語での実用的なシステム開発において、ファイル操作は不可欠です。本記事では、その基本を詳しく解説します。

1. ファイルへの書き込み

1.1 ファイルに文字列を書き込む

ファイルに文字列を書き込むためには、fprintf()関数を使用します。

#include <stdio.h>

int main() {
    FILE *file = fopen("output.txt", "w");
    if (file == NULL) {
        printf("Error opening file.\n");
        return 1;
    }

    fprintf(file, "Hello, World!\n");
    fprintf(file, "C programming is fun.\n");

    fclose(file);
    printf("Data written to file successfully.\n");
    return 0;
}
動作説明
  1. ファイルのオープン:fopen()"w"モードでファイルを開きます。
  2. データの書き込み:fprintf()を使用して、ファイルにデータを出力します。
  3. ファイルのクローズ:fclose()でファイルを閉じます。

1.2 数値データの書き込み

数値データを書き込む場合もfprintf()を使用します。

#include <stdio.h>

int main() {
    FILE *file = fopen("numbers.txt", "w");
    if (file == NULL) {
        printf("Error opening file.\n");
        return 1;
    }

    for (int i = 1; i <= 10; i++) {
        fprintf(file, "Number: %d\n", i);
    }

    fclose(file);
    printf("Numbers written to file successfully.\n");
    return 0;
}
ポイント
  • ループを使用して複数の数値をファイルに書き込む
  • 書き込むデータの形式を簡単に制御可能

1.3 書き込みエラーの処理

書き込み中にエラーが発生した場合、fprintf()の戻り値を確認します。

#include <stdio.h>

int main() {
    FILE *file = fopen("output.txt", "w");
    if (file == NULL) {
        printf("Error opening file.\n");
        return 1;
    }

    if (fprintf(file, "Hello, World!\n") < 0) {
        printf("Error writing to file.\n");
    }

    fclose(file);
    return 0;
}

2. ファイルからの読み込み

2.1 ファイルから文字列を読み取る

ファイルから文字列を読み取るには、fgets()関数を使用します。

#include <stdio.h>

int main() {
    FILE *file = fopen("output.txt", "r");
    if (file == NULL) {
        printf("Error opening file.\n");
        return 1;
    }

    char line[100];
    while (fgets(line, sizeof(line), file) != NULL) {
        printf("%s", line);
    }

    fclose(file);
    return 0;
}
動作説明
  1. ファイルのオープン:fopen()"r"モードでファイルを開きます。
  2. データの読み取り:fgets()を使用して1行ずつ読み取ります。
  3. データの表示:読み取ったデータをprintf()で出力します。

2.2 数値データの読み込み

ファイルから数値を読み取る場合、fscanf()関数を使用します。

#include <stdio.h>

int main() {
    FILE *file = fopen("numbers.txt", "r");
    if (file == NULL) {
        printf("Error opening file.\n");
        return 1;
    }

    int num;
    while (fscanf(file, "Number: %d\n", &num) != EOF) {
        printf("Read number: %d\n", num);
    }

    fclose(file);
    return 0;
}
ポイント
  • フォーマット指定子を使用して正確にデータを取得
  • 読み取りエラーを防ぐためにEOFをチェック

2.3 読み取りエラーの処理

読み取り中のエラーを防ぐには、fgets()fscanf()の戻り値を確認します。

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "r");
    if (file == NULL) {
        printf("Error opening file.\n");
        return 1;
    }

    char buffer[50];
    if (fgets(buffer, sizeof(buffer), file) == NULL) {
        printf("Error reading file.\n");
    }

    fclose(file);
    return 0;
}

3. 練習問題

以下の課題に挑戦して、ファイル操作のスキルを高めましょう。

  1. 文字列を入力し、指定したファイルに保存するプログラムを作成してください。
  2. ファイルから複数行のデータを読み取り、行番号とともに表示するプログラムを作成してください。
  3. 数値データをファイルに書き込み、そのデータを読み取って平均を計算するプログラムを作成してください。

4. 練習問題の解答と解説

問3の解答

#include <stdio.h>

int main() {
    FILE *file = fopen("numbers.txt", "w");
    if (file == NULL) {
        printf("Error opening file.\n");
        return 1;
    }

    fprintf(file, "10\n20\n30\n40\n50\n");
    fclose(file);

    file = fopen("numbers.txt", "r");
    if (file == NULL) {
        printf("Error opening file.\n");
        return 1;
    }

    int num, sum = 0, count = 0;
    while (fscanf(file, "%d", &num) != EOF) {
        sum += num;
        count++;
    }

    printf("Average: %.2f\n", (float)sum / count);
    fclose(file);
    return 0;
}

5. まとめ

ファイルへの書き込みと読み込みは、C言語でのプログラミングの基本スキルです。次回は、ファイル操作をさらに応用する方法を学びます。