【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 = '
#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;
}
}
}
'; 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