C言語 標準関数 | 応用 | サンプル

標準関数
構文
応用

管理人

プライバシーポリシー


書式

#include <stdio.h>

int fgetc( FILE *fp );

■戻り値:
ファイルポインタfpから1文字読み込んで、その文字をint型として返す。
ファイル内の全文字全部読み込んだ次の本関数fgetc呼び出しでEOFを返す。
また、読み込みエラー時もEOFを返す。

説明

fopenなどでファイルをオープンし、その戻り値であるファイルポインタfpを取得済でなければならない。
但し、標準入力stdinからの入力であればオープンする必要はない。

そのファイルポインタfpから1文字読み込んで、その文字をint型として返す。
本関数fgetcがEOFを検知するとEOFを返すが、エラー時もEOFを返すので区別が付かない。
このことから一般的にはエラー判定は行わずEOFの返却を以って全てを読み込んだものとしている。
これは、もしファイルに障害があって読み込み不能であった場合、ファイルオープン時にエラー検出可能であるからだと言われている。

確実に判別したい場合には、feofferrorを使用すれば判別できる。

入力ファイル(改行コードを可視化しています)
Linuxのviでは0123456789と入力後にEnterKeyを打鍵しないこと。
viだとEnterKeyを打鍵しなくとも改行コード(\n)が入るようです。
"ls -l test.txt"でファイルサイズが11バイト(\n=0x0a)であることを確認して下さい。
尚、Windowsではメモ帳(NotePad)で作成しEnterKeyを打鍵すること。
EnterKeyを打鍵しないと改行コードは入らないようです。
ファイルを右クリックして(プロパティで)ファイルサイズが
12バイト(\n=0x0d0a)であることを確認して下さい。
また、12バイトにはEOFコードは含まれておりません。
余談ですが、Windowsでは\nは0x0d0aです。
しかし、互換性維持のために本関数fgetcで取得すると0x0aになります。

0123456789\n
[EOF]

サンプル

#include <stdio.h>

main() {

  FILE * fp;
  int ret;
  int get_ch;

  /* Windows系の場合は"test.txt" */
  fp = fopen( "./test.txt" , "r" );
  if( fp == NULL ) {
    printf( "ファイルオープンエラー。\n" );
    return -1;
  }

  while(( get_ch = fgetc( fp )) != EOF ) {
    printf( "get_ch=0x%02x\n" , get_ch );
  }

  ret = fclose( fp );
  if( ret == EOF ) {
    printf( "ファイルクローズに失敗しました。\n" );
    return -1;
  }

  return 0;  
}

実行結果

get_ch=0x30
get_ch=0x31
get_ch=0x32
get_ch=0x33
get_ch=0x34
get_ch=0x35
get_ch=0x36
get_ch=0x37
get_ch=0x38
get_ch=0x39
get_ch=0x0a

補足

ファイルポインタfpに標準出力stdinを指定したサンプルを参考までに以下に示す。

尚、以下のサンプルを実行した場合、キーボード(標準入力)から任意の文字(列)を入力して動作確認が出来る。

プログラムを終了する場合、linux環境ではCtrl-d、windows環境ではctrl-zを打鍵する。

サンプル(補足)

#include <stdio.h>

main() {

  int get_ch;

  while(( get_ch = fgetc( stdin )) != EOF ) {
    printf( "get_ch=0x%02x\n" , get_ch );
  }
  
  return 0;  
}


Copyright © 2008-2015 http://hitorilife.com All Rights Reserved.