【C言語入門】fgetcの使い方

こんにちは、もがちゃんです

今回の記事では、ファイルから1文字(1バイト)ずつ入力する際に利用するfgetc関数の使い方を、簡単なサンプルプログラムとともに説明します

fgetcの構文

#include <stdio.h>
int fgetc(FILE *stream);

fgetcの説明

fgetcは、streamで指定されたファイルポインタに紐づくファイルから、1文字(1バイト)取得する

streamが指す入力ストリームのファイル終了表示子がセットされておらず、かつそのストリーム上に次の文字が存在する場合、fgetc関数は、その文字をunsigned char型として取り込み、int型に変換する。

JISX3010 プログラム言語C
stream

入力したいファイルに紐づくファイルポインタを指定します

(fopen関数の返却値を指定します)

返却値

ファイルからの読み取りに
成功した場合、読み取った文字を返す
ファイルの終わりを指しているの場合は、EOFを返す
エラーの場合は、EOFを返す

そのストリームのファイル終了表示子がセットされている場合、又はストリームがファイルの終わりに達している場合、そのストリームのファイル終了表示子をセットし、fgetc関数は,EOFを返す。

その他の場合、fgetc関数は,streamが指す入力ストリームから次の文字を返す。読取りエラーが発生した場合、そのストリームのエラー表示子をセットし、fgetc関数は,EOFを返す。

JISX3010 プログラム言語C

fgetcの使い方サンプル

fgetcを使ったサンプルソースと実行結果を紹介します

入力ファイル
1 2A	b*@あ

ソースコードと実行結果
#include <stdio.h>

/*
 * fgetcのサンプル
 */
int main(int argc, char *argv[]) {
  FILE *fp = NULL;

  fp = fopen("input.txt","r");
  if(fp == NULL) {
    fprintf(stdout, "fopen エラー\n");
    return -1;
  }

  int c = '\0';
  while((c = fgetc(fp)) != EOF) {
    fprintf(stdout, "c[0x%02x][%c]\n", c, c);
  }

  if(fp != NULL) {
    if(fclose(fp) != 0){
      fprintf(stdout, "fclose エラー\n");
      return -2;
    }
  }
}
fgetcの使い方サンプルソースの実行結果
fgetcの使い方サンプルソースの実行結果

半角スペースも、タブ文字も取得できます
あ(マルチバイト文字)の部分も、1バイト毎の取得になります

fgetcのまとめ

streamに標準入力(stdin)を指定した場合は、getcharと同じ動作をします

fgetcは1文字(1バイト)ずつの入力になるので、ファイルからの入力で使用するには効率が悪いですが、標準入力からの入力(キーボードからの入力)の場合は、キーボード入力時の文字を読み取るために使用することがあります

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA