第十八章 fscanf,fprintf


fscanf と fprintf                                                                                                      
scanfprintf とほとんど同じです。

次のような a.txt というファイルが存在したとします。                       
<a.txt>
100
abc

このようなファイルが存在するとして、次のプログラムを見てください。

<fscanf,fprintf>
#include<stdio.h>
#include<stdlib.h>

main()
{
    FILE *fp;
    int data_int;
    char data_char[256];

/* a.txt ファイルを読み込みモードで開く */
    if((fp=fopen("a.txt","r"))==NULL)
    {
        printf("ファイルを開けません\n");
        exit(1);
    }
    fscanf(fp,"%d",&data_int); /* ファイル内のint型データをdata_intに保存 */
    fscanf(fp,"%s",data_char); /* ファイル内の文字列をdata_charに保存 */
    fclose(fp);

/* b.txt ファイルを書き込みモードで開く */
   if((fp=fopen("b.txt","w"))==NULL)
    {
        printf("ファイルを開けません\n");
        exit(1);
    }
    fprintf(fp,"%d",data_int);  /* ファイルへdata_intの値を書き込む */
    fprintf(fp,"%s",data_char);  /* ファイルへdata_charの文字列を書き込む */
    fclose(fp);
}
<実行結果>
<a.txt>
100
abc
<b.txt>
100
abc

もし、b.txt というファイルが実行前にあったならば、前の内容は消されます。

scanf ,printf がわかるなら、特に難しいことはないと思います。

ファイルポインタについて
                                                                                            
実は第十六章から第十八章までにやった項目は、                                       
ファイル操作だけではなく、それ以前に扱ってきたキーボードや画面に対しても
扱うことができます。

どういうことかというと、
実はキーボードや画面に対するアクセスもファイルポインタを利用しているのです。
そのファイルポインタは stdio.h で次のように宣言されています。
stdin キーボード
stdout 画面(正常終了時)
stderr 画面(異常終了時)

つまり、今までキーボードや画面に対しておこなってきた処理は、
ファイルポインタを省略できる関数を用いてきただけなのです。

fscanf ,fprintf を用いて、scanf ,printf とまったく同じ処理をさせると
次のようになります。

<stdin,stdout>
#include<stdio.h>

main()
{
    int a;
    fprintf(stdout,"整数を入れてください\n");
    fscanf(stdin,"%d",&a);
    fprintf(stdout,"入力された値は%dです\n",a);
}
<実行結果>
整数を入れてください
10
入力された値は10です

<実行結果>は、“整数を入れてください”に対して10を入力した場合の例です。

<前に戻る  |目次|  次へ進む>