先頭へ戻る

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

Programming Place Plus トップページ -- C言語編 -- 標準ライブラリのリファレンス(名前順)

Programming Place Plus トップページ -- C言語編 -- 標準ライブラリのリファレンス(ヘッダ別)

先頭へ戻る

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 のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
Twitter でツイート Twitter をフォロー LINE で送る
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー