C言語編 標準ライブラリのリファレンス ungetc

先頭へ戻る

ungetc関数

概要 文字を入力ストリームへ押し戻す。
ヘッダ stdio.h
形式 int ungetc(int c, FILE* stream);
引数 c 押し戻す文字。EOF に等しい場合は何も起こらず、失敗とみなされる。
stream 入力ストリーム。
戻り値 成功したら押し戻した文字 c がそのまま返される。失敗した場合には、EOF が返される。
詳細 押し戻された文字は、次回の getc関数などの呼び出し時に取り出される。複数押し戻していた場合は、逆順で取り出される。何文字まで押し戻すことが可能かは環境によるが、最低でも 1文字の押し戻しが可能であることは保証されている。
fseek関数rewind関数fsetpos関数によってファイルポジションが変更された場合、押し戻されていた文字はクリアされる。
この関数が成功した場合、対象のストリームのファイル終了指示子がクリアされる。つまり、feof関数が偽を返すような状態に戻される。
注意
使用例
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE* fp;
    int c;

    fp = fopen( "test.txt", "r" );
    if( fp == NULL ){
        fputs( "ファイルオープンに失敗しました。\n", stderr );
        exit( EXIT_FAILURE );
    }

    /* 1文字目を読み込む */
    c = fgetc(fp);
    printf( "%c\n", c );

    /* 2文字目を読み込む */
    c = fgetc(fp);
    printf( "%c\n", c );

    /* 2文字目を押し戻す */
    ungetc( c, fp );

    /* 押し戻した文字が読み込まれる */
    c = fgetc(fp);
    printf( "%c\n", c );

    if( fclose( fp ) == EOF ){
        fputs( "ファイルクローズに失敗しました。\n", stderr );
        exit( EXIT_FAILURE );
    }

    return 0;
}

入力ファイル (test.txt) :

aaaaa
bbbbb
ccccc
ddddd
eeeee

実行結果:

a
a
a
関連 ワイド文字版の ungetwc関数がある。
解説章 第43章


参考リンク

更新履歴

'2018/4/22 解説中で C95 を(C89 に対して)特別扱いしないように修正。そもそもC言語編は C95ベースなので、余計な説明は省く。

'2018/4/18 「注意」の内容を「詳細」へ移動して、文章を修正。

'2018/1/22 新規作成。





標準ライブラリのリファレンス(名前順)のトップページへ

標準ライブラリのリファレンス(ヘッダ別)のトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ


このエントリーをはてなブックマークに追加
rss1.0 取得ボタン RSS