コース一覧
    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分

    ファイルに書き込む

    プログラムが終わると成績は消える

    ここまでの成績管理CLI は、実行するたびに名前と点数を打ち直していました。変数も配列も構造体もメモリの上にあるだけなので、main が終わればすべて消えます。次に起動したときも成績が残っているようにするには、ファイル に書き出すしかありません。

    ファイルを開く

    ファイルを扱う手順は、開く・読み書きする・閉じる、の 3 段階です。開くのは fopen です。

    c

    FILE *fp;
    fp = fopen("scores.txt", "w");

    FILE * は「開いているファイルを表す情報の住所」を入れる型です。中身が何かを知らなくても、fopen が返したものを持ち回れば使えます。ポインタなのは、この情報が大きいので毎回コピーせず住所でやりとりするためです。

    2 つ目の引数はモードで、書き込みなら "w" です。"w" には強い性質があります。同じ名前のファイルが既にあると 中身を全部消してから 開きます。追記したいときは "a"、読むだけなら "r" を使います。

    printf のファイル版

    書き込みには fprintf を使います。printf の先頭に、書き込み先の fp を足しただけです。

    c

    fprintf(fp, "%s %d\n", list[i].name, list[i].score);

    書式の書き方も \n の意味も printf とまったく同じです。違うのは、出た文字が画面ではなくファイルに流れることだけです。

    名前と点数の間に空白を入れ、1 人 1 行にしておくのがコツです。この形にしておくと、次回このファイルを読み戻すのが楽になります。

    閉じるまでが書き込み

    最後に fclose(fp); を呼びます。これは礼儀ではなく必須です。書き込んだ内容はいったん手元のバッファにためられていて、fclose のタイミングでまとめてファイルに送られます。閉じずに終わると、途中までしか書かれていないファイルが残ることがあります。

    なお、fopen で開けるファイルの数には上限があります。閉じずに開き続けると、いつか開けなくなります。開いたら閉じる、を対にして書く癖をつけてください。

    書けたことをその場で確かめる

    書き込みは、うまくいっても画面には何も出ません。だから「たぶん書けたはず」で先に進んでしまいがちで、実際にはファイル名を間違えていた、fclose を忘れていた、ということが起こります。

    そこで今回は、書いたあと同じプログラムの中で "r" で開き直し、fgets で 1 行ずつ読んで画面に出す部分を用意してあります。fgets は行を切り分けずに文字列としてそのまま取ってくる関数で、読めた行があるうちは行の中身を、ファイルの終わりに来たら NULL を返します。書いた直後に読み返せば、思ったとおりの形で保存できたかがその場で分かります。

    要件

    1. scores.txt を書き込みモードで開く
    2. fprintf で「田中 82」の形を1人1行ずつ書き出す
    3. 書き終えたら fclose で閉じる
    4. 読み直した結果の前に「保存した内容」の行が出ること

    ヒント

    書き込みモードの文字列は "w" です

    fprintf の第1引数は fopen が返した FILE * です

    fclose を忘れると読み直したときに中身が空になることがあります

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

    関連レッスン

    • ファイルを読み込む

      保存したデータを読み戻せるようになります。

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

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

    • つくる 保存機能

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

    • 第8章クイズ

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

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

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

    • 変数データに名前をつけて参照する仕組み
    • 配列サイズ固定の同型データの集まり
    • メモリプログラムとデータを一時保持する高速領域
    • 引数位置引数=順番で渡す。
    • 関数処理に名前を付けて再利用できる単位
    main.c
    エディタを読み込んでいます

    メモ

    ファイルに書き込む

    ⌘S で保存