ungetc() — 入力ストリームへの文字のプッシュ
フォーマット
#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 の値は、次のいずれかに設定されます。
- 値
- 意味
- ENOTREAD
- ファイルは読み取り操作用にオープンされていません。
- EIOERROR
- リカバリー不能な入出力エラーが発生しました。
- EIORECERR
- リカバリー可能な入出力エラーが発生しました。
ungetc() 関数は、type=record を指定してオープンしたファイルについてはサポートされません。
例
この例では、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);
}