C言語 読み込んだ文字を1文字押し戻す - stdio.h - [ ungetc ]

2008.10.06 Monday | by LRESULT


み込んだ文字を1文字押し戻すとは、どういう事なんだ?というわけですが、

戻すには ungetc()を使用します。

読み込んだ文字とは、、ファイル読み込みや、キーボードからの入力などの
ストリームと呼ばれるものから読み込んだ文字です。
その文字を、fgetc()や、getchar()などで読み込んだ後、
またもう1度ストリームに戻してしまう、というのが ungetc()の処理です。


ungetc
書式 int ungetc( int c, FILE *fp )
機能 読み込んだ文字をストリームに1文字戻す
引数 int c : 押し戻したい1文字
FILE *fp : ファイルポインタ(ストリーム)
戻り値 成功すると、押し戻した1文字を返し、
失敗すると、EOF(-1)を返します。


なぜ必要なんだ?という事ですが
  文字列を分解する際に、判定用の文字を1度読み込んだ後、
  もう1度ストリームに戻してから改めて処理できる為、便利なのです。





サンプルコード
ファイルから「A」を1文字読み込んだ後、ungetc()で1文字戻し、
再度1文字を読み込んでみます。
#include <stdio.h>

int main(void)
{
  FILE *fp;
  char *fname = "test.txt";
  int c;

  fp = fopen( fname, "r" );
  if( fp == NULL ){
    printf( "%sファイルが開けません¥n", fname );
    return 0;
  }

  c = fgetc( fp );
  printf( "1文字読み込む %c¥n", c );

  ungetc( c, fp );   /* 1文字戻す */

  c = fgetc( fp );
  printf( "再度読み込む %c¥n", c );

  fclose( fp );

  return 0;
}



結果
1文字読み込む A
再度読み込む A
と、表示されます。

fgetc()で取得した1文字目をファイルへ戻して
もう1度、1文字目を取得しています。

カテゴリ:C言語 stdio.h | 22:33 | comments(0) | trackbacks(0) | -


コメントする











この記事のトラックバックURL

トラックバック機能は終了しました。

トラックバック