さて、次はファイルの読み込みです。
scanfでファイルを読み込んだ時はどうでしたか?
きっとこんな感じでしたでしょうね。
/////////////////////////////////////////
#include <stdio.h>
int main()
{
int years;
double akazi;
char str[256];
printf("years>");
scanf("%d",&years);
printf("akazi>");
scanf("%lf",&akazi);
printf("str>");
scanf("%s",str);
printf("years : %d\n",years);
printf("akazi : %lf\n",akazi);
printf("str : %s\n",str);
return 0;
}
//////////////////////////////////////
//////実行結果//////////////////////
years>2003(入力)
akazi>-12.2(入力)
str>Densanbu(入力)
years : 2003
akazi : -12.200000
str : Densanbu
Press any key to continue
///////////////////////////////////
同じような方法でファイルから読み込むことができます。 そのための関数がfscanfです。 では早速サンプルソースを見てみましょう。
/////////サンプル2/////////////////////////
//////////file2.c//////////////////////////
#include <stdio.h>
#include <stdio.h>
int main()
{
FILE *fp;/*ファイルポインタ*/
int years;
double akazi;
char str[256];
/*test.txtを読み込みモードで開く*/
fp=fopen("test.txt","r");
if(fp==NULL)
{
printf("ファイルが開けません。\n");
return 0;
}
/*ファイルから読み込む*/
fscanf(fp,"%d",&years);
fscanf(fp,"%lf",&akazi);
fscanf(fp,"%s",str);
fclose(fp);/*ファイルを閉じる。*/
/*表示する。*/
printf("years : %d\n",years);
printf("akazi : %lf\n",akazi);
printf("str : %s\n",str);
return 0;
}
/////test.txt(ソースと同フォルダに作っておく)/////
2004 -1.2
Densanbu
/////////////////////////////////////////////////
//////////////////実行結果////////////////////
years : 2004
akazi : -1.200000
str : Densanbu
Press any key to continue
////////////////////////////////////////////////
scanfのときとあまり変わりありませんね?
fscanfは第一引数にファイルポインタを指定すれば、あとはscanfと同じように使えます。
(fscanfごとに改行を含む空白文字まで、もしくは指定された変数の量まで読み込みます。)
あとは
読み込む前後にfopenでファイルを開く処理とfcloseでファイルを閉じてる処理があるだけです。
読み込みモードなのでfopenでは"r"を指定しています。