C言語 読み込んだ文字を1文字押し戻す - stdio.h - [ ungetc ]
2008.10.06 Monday | by LRESULT
読み込んだ文字を1文字押し戻すとは、どういう事なんだ?というわけですが、
戻すには ungetc()を使用します。
読み込んだ文字とは、、ファイル読み込みや、キーボードからの入力などの
ストリームと呼ばれるものから読み込んだ文字です。
その文字を、fgetc()や、getchar()などで読み込んだ後、
またもう1度ストリームに戻してしまう、というのが 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文字目を取得しています。 |