コース一覧
    C言語基礎 ポインタ・構造体・ファイル
    ファイルを読み込む

    C言語基礎 ポインタ・構造体・ファイル

    C言語のポインタ、構造体、ファイル操作を学び、データを扱う基礎を固めるコースです。

    1
    ポインタの入口
    01. アドレスとは15分
    02. ポインタの&と*15分
    03. scanfの&の正体15分
    04. 関数で値を書き換える15分
    05. 配列を関数に渡す15分
    06. つくる 入力処理の関数化15分
    07. 第7章クイズ10分
    2
    構造体とファイル
    01. 構造体15分
    02. メンバの読み書き15分
    03. 構造体配列15分
    04. 構造体と関数15分
    05. ファイルに書き込む15分
    06. ファイルを読み込む15分
    07. ファイルの失敗に備える15分
    08. つくる 保存機能15分
    09. 第8章クイズ10分
    3
    総合制作
    01. メニュー統合15分
    02. 自由拡張15分
    03. 完成と次のステップ10分

    ファイルを読み込む

    保存したものを変数に戻す

    前回、成績を scores.txt に「名前 点数」の形で書き出しました。今回はその逆をやります。ファイルの文字を読み取って、struct Student の配列に戻します。ここまでできて初めて、前回の続きから使える成績管理CLI になります。

    開き方は同じ fopen で、モードだけ "r" にします。

    c

    fp = fopen("scores.txt", "r");

    読むだけなので、既にある中身が消えることはありません。

    scanf のファイル版

    読み取りには fscanf を使います。scanf の先頭に fp を足しただけです。

    c

    fscanf(fp, "%31s %d", list[i].name, &list[i].score);

    書式の意味も & の付け方も scanf と同じです。%s は空白か改行までを 1 つの単語として読み、%d は数字を読みます。前回わざと「名前 点数」を空白で区切って 1 行ずつ書いたのは、この読み方にぴったり合う形だからです。

    どこで止めるか

    キーボードからの入力と違い、ファイルには終わりがあります。何人分入っているか分からないファイルを読むには、終わりを検知して止まる 仕組みが要ります。

    ここで fscanf の 戻り値 を使います。fscanf は「書式のうち何個ぶん読み取れたか」を返します。"%31s %d" なら成功時は 2 です。ファイルの終わりに来ると読み取れる項目が無くなるので、2 より小さい値が返ります。

    c

    while (count < 3 && fscanf(fp, "%31s %d", list[count].name, &list[count].score) == 2) {
        count = count + 1;
    }

    この while は「2 個読めたら次へ、読めなくなったら抜ける」と読みます。抜けたときの count が、そのまま読み込めた人数です。人数を別のどこかに書いておかなくても、数えながら読めば分かるわけです。

    count < 3 を前に置いているのは、配列の枠より多くファイルに入っていたときにはみ出さないためです。前章で学んだ配列の範囲外アクセスは、ファイルから読むときにも起こります。

    1回の実行で書いて読む

    今回の課題では、まず入力された 3 人分をファイルに書き出し、そのあと自分で書いたファイルを読み戻します。読み込みだけを試したいところですが、前に実行したときのファイルが必ず残っている保証はありません。書いてから読む形にしておけば、どんな状況でも同じ結果になります。

    要件

    1. scores.txt を読み込みモードで開く
    2. fscanf の戻り値が2の間だけループして list に読み込む
    3. 読み込んだ人数を count に数える
    4. 一覧を「田中 82点」の形で表示し、最後に「3人の平均は81点です」の形で表示する

    ヒント

    読み込みモードの文字列は "r" です

    fscanf は読み取れた項目数を返すので、== 2 が続く間ループします

    list[count].name は & なし、&list[count].score は & ありです

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/08/07

    関連レッスン

    • ファイルの失敗に備える

      ファイルが無い初回起動でも落ちないプログラムを書けるようになります。

    • つくる 保存機能

      読み込みから更新、保存までを1本で通せるようになります。

    • 第8章クイズ

      第8章の理解を確認します。

    • メニュー統合

      登録と一覧と集計と保存をメニュー式の1本にまとめられるようになります。

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • 変数データに名前をつけて参照する仕組み
    • 配列サイズ固定の同型データの集まり
    • 戻り値呼び出し元への返答を表す点線矢印
    • ループ繰り返し処理。矢印で戻すか専用記号で示す
    main.c
    エディタを読み込んでいます

    メモ

    ファイルを読み込む

    ⌘S で保存