fprintf関数とfscanf関数

 今回は、ファイルの読み込み・書き込みに関する命令の中からfprintf関数fscanf関数について説明します。それぞれ、標準入出力のprintf関数とscanf関数に対応していると考えて良いです。そのため、fgetc(fgets)関数やfputc(fputs)関数とは使い方が異なり、若干わかりにくいかもしれません。ただし、使い方は、printf関数やscanf関数とほとんど変わりません。

 まずは以下のサンプルコードを、確認して下さい。

#include <stdio.h>

int main(int argc, const char * argv[])
{
    
    // insert code here...
    
    // ファイルのオープン
    FILE *fp;
    fp = fopen("testfile3.txt", "w");
    
    // ファイルに書き込み
    fprintf(fp, "%s", "abcdefg\nhijklmn\nopqrstu\nvwxyz");
    
    // ファイルのクローズ
    fclose(fp);
    
    return 0;
}

 実行するとtestfile3.txtが出来ていて、以下のように4行の文字列が書かれていると思います。

abcdefg
hijklmn
opqrstu
vwxyz

 ここで、以下のプログラムを実行してみて下さい。

#include <stdio.h>

int main(int argc, const char * argv[])
{
    
    // insert code here...
    
    // ファイルのオープン
    FILE *fp;
    if((fp = fopen("testfile3.txt", "r")) == NULL) {
        printf("ファイルを開けませんでした。");
    } else {
        
        // ファイルから読み込み
        char ch[40];
        fscanf(fp, "%s", ch);
        printf("%s", ch);
        
        // ファイルのクローズ
        fclose(fp);
     
    }
    
    return 0;
}

 画面に「abcdefg」と表示されることを確認して下さい。今回も、読み込みエラーが発生する可能性を考慮し、エラーになる場合は、この後の処理を行わないように記述しています。

 応用例として、こちらもファイルから読み込んだものがファイルの末端(NULL)になるまでwhileでループさせて処理する、という書き方も出来ます。余裕のある方は、どう書けば良いか考えてみると良いでしょう。

 ちなみに、どの入出力関数を使うかは、用途や好みでお決めいただければ大丈夫です。

■スポンサーリンク

このページの先頭へ