フォーマット
#include <stdio.h> int ungetc(int c, FILE *stream);
言語レベル: ANSI
スレッド・セーフ: はい。
説明
ungetc() 関数は、符号なしの文字 c を 指定された入力 stream にプッシュ・バックします。ただし、連続して ungetc() を呼び出す場合は、 入力ストリームへのプッシュ・バックを保証できる連続した文字は 1 つのみです。 stream は、読み取りのためにオープンしていなければ なりません。stream での以降の読み取り操作は、 c から開始します。文字 c を EOF 文字にすることはできません。
ungetc() でストリームに配置された文字は、stream から読み取られる前に、 fseek()、fsetpos()、rewind()、または fflush() が呼び出された場合は消去されます。
戻り値
ungetc() 関数は、c をプッシュ・バックできなかった場合に、 unsigned char、または EOF に変換された整数引数 c を戻します。
errno の値は、次のいずれかに設定されます。
ungetc() 関数は、type=record を指定してオープンしたファイルについてはサポートされません。
ungetc() の使用例
この例では、while ステートメントが算術ステートメントを使用して 入力データ・ストリームから 10 進数を読み取り、読み取り時の数字の 数値を構成します。ファイルの終わりまでに非数字が検出される場合、 ungetc() は、後の入力関数が処理を実行できるように、 入力ストリーム内でそれを置き換えます。
#include <stdio.h> #include <ctype.h> int main(void) { FILE *stream; int ch; unsigned int result = 0; while ((ch = getc(stream)) != EOF && isdigit(ch)) result = result * 10 + ch - '0'; if (ch != EOF) ungetc(ch,stream); /* Put the nondigit character back */ printf("The result is: %d¥n", result); if ((ch = getc(stream)) != EOF) printf("The character is: %c¥n", ch); }
関連情報