fgetc()
ファイル入力にはfgets()関数、fgetc()関数、fscanf()関数の3種類があります。
fgetc()はファイルを文字単位で読み込み戻り値として読み込んだ文字を返します。
fgetc(【ポインタ名】)
で読み込むことができます。
以下がサンプルコードです。
file_in_sample1.c
#include <stdio.h>
int main(void)
{
FILE *fp;
char c;
fopen_s(&fp, "file.txt", "r");
while (1)
c = fgetc(fp);
if(c == NULL)
break;
printf("%s", str);
fclose(fp);
return 0;
}
fgets()
fgets()はファイルを行単位で読み込み文字型配列に格納します。
fgets(【格納する配列】, 【1行の最大文字数】,【ポインタ名】)
で読み込むことができます。
以下がサンプルコードです。
file_in_sample2.c
#include <stdio.h>
int main(void)
{
FILE *fp;
char str[256];
fopen_s(&fp, "file.txt", "r");
while (fgets(str, 256, fp) != NULL)
printf("%s", str);
fclose(fp);
return 0;
}
fscanf()
fscanf()はファイルを1行読み込み、書式付文字列で指定した形式と一致すれば、その部分を指定した型に変換して変数に格納します。書式付文字列はscanf()で使う文字列のことです。
fscanf(【ポインタ名】, 【書式付文字列】,【格納変数のアドレス】…)
で読み込むことができます。
以下がサンプルコードです。
file_in_sample3.c
#include <stdio.h>
int main(void)
{
FILE *fp;
int i;
double d;
fopen_s(&fp, "file.txt", "r");
while (fscanf(fp, "%d%lf", &i, &d) != 2)
printf("%s", str);
fclose(fp);
return 0;
}
fscanf()は戻り値として格納した変数の数を返します。
自身のソースコードを表示する
ファイル入力の例題として、そのプログラムのソースコードを表示するプログラムが有名です。
file_in_sample4.c
#include <stdio.h>
#define BUF_SIZE 256
int main(void)
{
FILE *fp;
char buf[BUF_SIZE];
char *ch;
fopen_s(&fp, __FILE__, "r");
if(fp == NULL)
return -1;
while(1)
{
ch=fgets(buf, BUF_SIZE, fp);
if(ch==NULL){
break;
}
else{
printf("%s", buf);
}
}
fclose(fp);
return 0;
}
「__FILE__」はプログラム自身のファイルアドレスを示しています。
詳しくはプリプロセッサにて解説しています。